SpringMVC請求處理流程(圖解)及九大組件


SpringMVC請求處理流程

流程說明

第⼀步:⽤戶發送請求⾄前端控制器DispatcherServlet

第⼆步: DispatcherServlet收到請求調⽤HandlerMapping處理器映射器

第三步:處理器映射器根據請求Url找到具體的Handler(后端控制器),⽣成處理器對象及處理器攔截器(如果 有則⽣成)⼀並返回DispatcherServlet

第四步: DispatcherServlet調⽤HandlerAdapter處理器適配器去調⽤Handler

第五步:處理器適配器執⾏Handler

第六步: Handler執⾏完成給處理器適配器返回ModelAndView

第七步:處理器適配器向前端控制器返回 ModelAndView, ModelAndView 是SpringMVC 框架的⼀個底層對 象,包括 Model 和 View

第⼋步:前端控制器請求視圖解析器去進⾏視圖解析,根據邏輯視圖名來解析真正的視圖。

第九步:視圖解析器向前端控制器返回View

第⼗步:前端控制器進⾏視圖渲染,就是將模型數據(在 ModelAndView 對象中)填充到 request 域

第⼗⼀步:前端控制器向⽤戶響應結果

SpringMVC九大組件

HandlerMapping(處理器映射器)

HandlerMapping 是⽤來查找 Handler 的,也就是處理器,具體的表現形式可以是類,也可以是⽅法。⽐如,標注了@RequestMapping的每個⽅法都可以看成是⼀個Handler。 Handler負責具體實際的請求處理,在請求到達后, HandlerMapping 的作⽤便是找到請求相應的處理器

Handler 和 Interceptor.

HandlerAdapter(處理器適配器)

HandlerAdapter 是⼀個適配器。因為 Spring MVC 中 Handler 可以是任意形式的,只要能處理請求即可。但是把請求交給 Servlet 的時候,由於 Servlet 的⽅法結構都是

doService(HttpServletRequest req,HttpServletResponse resp)形式的,要讓固定的
Servlet 處理⽅法調⽤ Handler 來進⾏處理,便是 HandlerAdapter 的職責。

HandlerExceptionResolver

HandlerExceptionResolver ⽤於處理 Handler 產⽣的異常情況。它的作⽤是根據異常設置

ModelAndView,之后交給渲染⽅法進⾏渲染,渲染⽅法會將 ModelAndView 渲染成⻚⾯。

ViewResolver

ViewResolver即視圖解析器,⽤於將String類型的視圖名和Locale解析為View類型的視圖,只有⼀個resolveViewName()⽅法。從⽅法的定義可以看出, Controller層返回的String類型視圖名viewName 最終會在這⾥被解析成為View。 View是⽤來渲染⻚⾯的,也就是說,它會將程序返回的參數和數據填⼊模板中,⽣成html⽂件。 ViewResolver 在這個過程主要完成兩件事情:

ViewResolver 找到渲染所⽤的模板(第⼀件⼤事)和所⽤的技術(第⼆件⼤事,其實也就是找到視圖的類型,如JSP)並填⼊參數。默認情況下, Spring MVC會⾃動為我們配置⼀個

InternalResourceViewResolver,是針對 JSP 類型視圖的。

RequestToViewNameTranslator

RequestToViewNameTranslator 組件的作⽤是從請求中獲取 ViewName.因為 ViewResolver 根據ViewName 查找 View,但有的 Handler 處理完成之后,沒有設置 View,也沒有設置
ViewName,便要通過這個組件從請求中查找 ViewName。

LocaleResolver

ViewResolver 組件的 resolveViewName ⽅法需要兩個參數,⼀個是視圖名,⼀個是
Locale。

LocaleResolver ⽤於從請求中解析出 Locale,⽐如中國 Locale 是 zh-CN,⽤來表示⼀個區域。這個組件也是 i18n 的基礎。

ThemeResolver

ThemeResolver 組件是⽤來解析主題的。主題是樣式、圖⽚及它們所形成的顯示效果的集合。

Spring MVC 中⼀套主題對應⼀個 properties⽂件,⾥⾯存放着與當前主題相關的所有資源,如圖⽚、 CSS樣式等。創建主題⾮常簡單,只需准備好資源,然后新建⼀個“主題名.properties”並將資

源設置進去,放在classpath下,之后便可以在⻚⾯中使⽤了。 SpringMVC中與主題相關的類有

ThemeResolver、 ThemeSource和Theme。 ThemeResolver負責從請求中解析出主題名,

ThemeSource根據主題名找到具體的主題,其抽象也就是Theme,可以通過Theme來獲取主題和具體的資源。

MultipartResolver

MultipartResolver ⽤於上傳請求,通過將普通的請求包裝成 MultipartHttpServletRequest
來實現。 MultipartHttpServletRequest 可以通過 getFile() ⽅法 直接獲得⽂件。如果上傳多個⽂件,還可以調⽤ getFileMap()⽅法得到Map<FileName, File>這樣的結構, MultipartResolver 的作⽤就是封裝普通的請求,使其擁有⽂件上傳的功能。

FlashMapManager

FlashMap ⽤於重定向時的參數傳遞,⽐如在處理⽤戶訂單時候,為了避免重復提交,可以處理完post請求之后重定向到⼀個get請求,這個get請求可以⽤來顯示訂單詳情之類的信息。這樣做雖然可以規避⽤戶重新提交訂單的問題,但是在這個⻚⾯上要顯示訂單的信息,這些數據從哪⾥來獲得呢?因為重定向時么有傳遞參數這⼀功能的,如果不想把參數寫進URL(不推薦),那么就可以通過FlashMap來傳遞。只需要在重定向之前將要傳遞的數據寫⼊請求(可以通過
ServletRequestAttributes.getRequest()⽅法獲得)的屬性UTPUT_FLASH_MAP_ATTRIBUTE

中,這樣在重定向之后的Handler中Spring就會⾃動將其設置到Model中,在顯示訂單信息的⻚⾯上就可以直接從Model中獲取數據。 FlashMapManager 就是⽤來管理 FalshMap 的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM