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

SpringMVC請求處理流程

流程說明html

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

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

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

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

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

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

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

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

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

第⼗步:前端控制器進⾏視圖渲染,就是將模型數據(在 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 的。

相關文章
相關標籤/搜索