Spring MVC 流程圖






Spring工作流程描述
? ? ??1. 用戶向服務器發送請求,請求被Spring 前端控制Servelt DispatcherServlet捕獲;
? ? ??2.?DispatcherServlet對請求URL進行解析,得到請求資源標識符(URI)。然后根據該URI,調用HandlerMapping獲得該Handler配置的所有相關的對象(包括Handler對象以及Handler對象對應的攔截器),最后以HandlerExecutionChain對象的形式返回;
? ??? 3.?DispatcherServlet 根據獲得的Handler,選擇一個合適的HandlerAdapter。(附注:如果成功獲得HandlerAdapter后,此時將開始執行攔截器的preHandler(...)方法
? ? ???4. ?提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)。 在填充Handler的入參過程中,根據你的配置,Spring將幫你做一些額外的工作:
? ? ??HttpMessageConveter: 將請求消息(如Json、xml等數據)轉換成一個對象,將對象轉換為指定的響應信息
? ? ??數據轉換:對請求消息進行數據轉換。如String轉換成Integer、Double等
? ? ??數據根式化:對請求消息進行數據格式化。 如將字符串轉換成格式化數字或格式化日期等
? ? ??數據驗證: 驗證數據的有效性(長度、格式等),驗證結果存儲到BindingResult或Error中
? ??? 5. ?Handler執行完成后,向DispatcherServlet?返回一個ModelAndView對象;
? ??? 6. ?根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經注冊到Spring容器中的ViewResolver)返回給DispatcherServlet?;
? ??? 7.?ViewResolver 結合Model和View,來渲染視圖
? ? ? 8. 將渲染結果返回給客戶端。

Spring工作流程描述
? ??為什么Spring只使用一個Servlet(DispatcherServlet)來處理所有請求?
? ? ?詳細見J2EE設計模式-前端控制模式
??? Spring為什么要結合使用HandlerMapping以及HandlerAdapter來處理Handler?

? ? 符合面向對象中的單一職責原則,代碼架構清晰,便于維護,最重要的是代碼可復用性高。如HandlerAdapter可能會被用于處理多種Handler。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539431.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539431.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539431.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kafka maven沒有下載_Kafka 系列(三)——Kafka 生產者詳解

首先介紹一下 Kafka 生產者發送消息的過程:Kafka 會將發送消息包裝為 ProducerRecord 對象, ProducerRecord 對象包含了目標主題和要發送的內容,同時還可以指定鍵和分區。在發送 ProducerRecord 對象前,生產者會先把鍵和值對象序列…

linux 硬盤繁忙,icinga2 借助check_iostat.sh抓取linux服務器的diskIO(硬盤繁忙度)

icinga2 借助check_iostat.sh抓取linux服務器的diskIO(硬盤繁忙度)下載地址:https://exchange.nagios.org/directory/Plugins/Operating-Systems/Linux/Check-Iostat-Updated/details對腳本進行修改(默認為$12,12為w_await值,14為%util值)UTI…

centos7安裝kubernetes1.9集群

節點規劃 本次選用一個master節點,三個node節點來安裝k8s集群。   節點IPM010.xx.xx.xxN010.xx.xx.xxN110.xx.xx.xxN210.xx.xx.xx集群啟動前的準備(請用root用戶執行) 節點準備工作(在每臺機器上執行) 包括修改主機名,關閉防火墻等操作。  k8s集群會…

oracle中查詢某張表的大小

select sum(bytes)/1024/1024 "表大小(M)" from user_segments where segment_nametable_name;--注,僅表數據的大小,不含索引、分區、LOB類型 select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name having Segm…

python圖像分割算法_OpenCV-Python 圖像分割與Watershed算法 | 三十四

目標 在本章中, 我們將學習使用分水嶺算法實現基于標記的圖像分割 我們將看到:cv.watershed() 理論 任何灰度圖像都可以看作是一個地形表面,其中高強度表示山峰,低強度表示山谷。你開始用不同顏色的水(標簽)填充每個孤立的山谷(局…

linux dns 問題嗎,Linux下DNS的問題

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓Nov 9 06:36:22 BJ-linux kernel: end_request: I/O error, dev fd0, sector 0Nov 9 06:36:22 BJ-linux kernel: end_request: I/O error, dev fd0, sector 0Nov 9 06:37:06 BJ-linux system-config-network[4031]: - //etc/…

NEO從源碼分析看共識協議

2019獨角獸企業重金招聘Python工程師標準>>> 0x00 概論 不同于比特幣使用的工作量證明(PoW)來實現共識,NEO提出了DBFT共識算法。DBFT改良自股權證明算法(PoS),我沒有具體分析過PoS的源碼&#x…

oracle實現id自增和設置主鍵

1、關于主鍵:在建表時指定primary key字句即可: create table test( id number(6) primary key, name varchar2(30) ); 如果是對于已經建好的表,想增加主鍵約束,則類似語法: alter table test add constraint p…

python scrapy框架基如何實現多線程_Python實現在線程里運行scrapy的方法

本文實例講述了Python實現在線程里運行scrapy的方法。分享給大家供大家參考。具體如下: 如果你希望在一個寫好的程序里調用scrapy,就可以通過下面的代碼,讓scrapy運行在一個線程里。 """ Code to run Scrapy crawler in a thr…

怎樣在linux系統上安裝r,Linux系統之路——如何在CentOS7.2安裝R(示例代碼)

使用ubuntu的小伙伴們直接使用命令sudo apt-get installr-base-dev或者r-base搞定。然而對于使用centos的我卻一直卡在安裝這一步,十分的悲催,只有羨慕的份,但也不至于在linux上使用不上R。辦法還是有的,自己總結出兩種方法&#…

自定義實現棧的功能

棧的定義:棧是一個數據集合,我們可以吧它理解為是一個只能在一端進行插入或者刪除的列表。棧的特點:先進后出 Stack() 建立一個空的棧對象push() 吧一個元素添加到棧的最頂層pop() 刪除棧最頂層的元素,并返回這個元素gettop() 取棧…

mybatis循環map的一些技巧

<foreach>標簽的用法&#xff1a; 六個參數&#xff1a; collection&#xff1a;要循環的集合 index&#xff1a;循環索引&#xff08;不知道啥用。。&#xff09; item&#xff1a;集合中的一個元素&#xff08;item和collection&#xff0c;按foreach循環理解&#xff…

linux部署node web,nodejs怎么部署到Linux上?

nodejs怎么部署到Linux上&#xff1f;下面本篇文章就來給大家介紹一下在Linux上部署nodejs的方法&#xff0c;希望對大家有所幫助。nodejs部署到Linux上的方法如下&#xff1a;(建議先安裝xshell和xftp)1、到nodejs官網下載壓縮包(選擇合適自己系統的版本)&#xff0c;放到Linu…

python樹莓派 是什么_用樹莓派和Python給你的植物澆水

我想指出&#xff0c;我絕不是電子學專家。如果你讓我制作一個電路圖或者解釋某件電子產品工作原理的細節&#xff0c;我會一無所知。在生活中&#xff0c;我對電力的工作原理有了基本的了解&#xff0c;我只是胡亂擺弄了一下電子元件就完成了這個工程。話雖如此&#xff0c;當…

htmlspecialchars() 函數過濾XSS的問題

htmlspecialchars()函數的功能如下&#xff1a; htmlspecialchars() 函數把預定義的字符轉換為 HTML 實體。 預定義的字符是&#xff1a; & &#xff08;和號&#xff09;成為 &" &#xff08;雙引號&#xff09;成為 " &#xff08;單引號&#xff09;成為 …

c語言中 字母對應的數值,C語言編程:求下式中每個字母所代表的數字

編寫程序求解下式中各字母所代表的數字&#xff0c;不同的字母代表不同的數字。PEAR- ARA PEA*問題分析與算法設計類似的問題從計算機算法的角度來說是比較簡單的&#xff0c;可以采用最常見的窮舉方法解決。程序中采用循環窮舉每個字母所可能代表的數字&#xff0c;然后將字母…

用mac的python寫網絡爬蟲_在mac下使用python抓取數據

2015已經過去&#xff0c;這是2016的第一篇博文&#xff01; 祝大家新年快樂&#xff01; 但是我還有好多期末考試&#xff01; 還沒開始復習&#xff0c;唉&#xff0c;一把辛酸淚&#xff01; 最近看了一遍彥祖的文章叫做 所以自己也想小試牛刀.于是便開始動手寫,但初次接觸,…

運輸配送信息Delivery_Information

為什么80%的碼農都做不了架構師&#xff1f;>>> 運輸配送信息Delivery_Information 金銀倉會選用以下運輸公司&#xff0c;為客戶配送磁磚傢俬潔具&#xff1a; 佛山冠昌達中港運輸&#xff08;散貨或包車&#xff0c;近佛山石灣的磁磚倉庫&#xff0c;近樂從傢俬城…

linux的 dev vdal,RAZVOJ DELA NA DALJAVO V SLOVENIJI

摘要&#xff1a;V diplomskem delu bomo raziskovali razvoj dela na daljavo v Sloveniji. Na? poglavitni cilj je prikazati ?irjenje teledela v Sloveniji. Drugod po Evropi se ?e vrsto let uveljavlja tudi ta vrsta opravljanja dela, pri nas pa manj. O tem lah…

Spring+SpringMVC+Mybatis 多數據源整合

原文地址&#xff1a;http://blog.csdn.net/q908555281/article/details/50316137 ----------------------------------- 此篇文章是基于Spring3.0和mybatis3.2的總體大概流程 &#xff1a;1. 拷貝所需jar 2.寫一個數據庫切換的工具類&#xff1a;DataSourceContextHolder&am…