Spring?MVC請求處理流程和九大組件詳解
需求:前端瀏覽器請求url: http://localhost:8080/demo/handle01,前端??顯示后臺服務器的時間
開發(fā)過程
- 配置DispatcherServlet前端控制器
- 開發(fā)處理具體業(yè)務邏輯的Handler(@Controller、@RequestMapping)
- xml配置?件配置controller掃描,配置springmvc三?件
- 將xml?件路徑告訴springmvc(DispatcherServlet)
Spring MVC 請求處理流程

流程說明
第?步:?戶發(fā)送請求?前端控制器DispatcherServlet
第?步:DispatcherServlet收到請求調?HandlerMapping處理器映射器
第三步:處理器映射器根據(jù)請求Url找到具體的Handler(后端控制器),?成處理器對象及處理器攔截器(如果 有則?成)?并返回DispatcherServlet
第四步:DispatcherServlet調?HandlerAdapter處理器適配器去調?Handler
第五步:處理器適配器執(zhí)?Handler
第六步:Handler執(zhí)?完成給處理器適配器返回ModelAndView
第七步:處理器適配器向前端控制器返回 ModelAndView,ModelAndView 是SpringMVC 框架的?個底層對象,包括 Model 和 View
第?步:前端控制器請求視圖解析器去進?視圖解析,根據(jù)邏輯視圖名來解析真正的視圖。
第九步:視圖解析器向前端控制器返回View
第?步:前端控制器進?視圖渲染,就是將模型數(shù)據(jù)(在 ModelAndView 對象中)填充到 request 域
第??步:前端控制器向?戶響應結果。
Spring MVC 九?組件
- HandlerMapping(處理器映射器)
HandlerMapping 是?來查找 Handler 的,也就是處理器,具體的表現(xiàn)形式可以是類,也可以是?法。?如,標注了@RequestMapping的每個?法都可以看成是?個Handler。Handler負責具體實際的請求處理,在請求到達后,HandlerMapping 的作?便是找到請求相應的處理器Handler 和 Interceptor。
- HandlerAdapter(處理器適配器)
HandlerAdapter 是?個適配器。因為 Spring MVC 中 Handler 可以是任意形式的,只要能處理請求即可。但是把請求交給 Servlet 的時候,由于 Servlet 的?法結構都是doService(HttpServletRequest req,HttpServletResponse resp)形式的,要讓固定的 Servlet 處理?法調? Handler 來進?處理,便是HandlerAdapter 的職責。
- HandlerExceptionResolver(Handler異常解析器)
HandlerExceptionResolver ?于處理 Handler 產?的異常情況。它的作?是根據(jù)異常設置ModelAndView,之后交給渲染?法進?渲染,渲染?法會將 ModelAndView 渲染成??。
- ViewResolver(視圖解析器)
ViewResolver即視圖解析器,?于將String類型的視圖名和Locale解析為View類型的視圖,只有?個resolveViewName()?法。從?法的定義可以看出,Controller層返回的String類型視圖名viewName 最終會在這?被解析成為View。View是?來渲染??的,也就是說,它會將程序返回的參數(shù)和數(shù)據(jù)填?模板中,?成html?件。ViewResolver 在這個過程主要完成兩件事情:
ViewResolver 找到渲染所?的模板(第?件?事)和所?的技術(第?件?事,其實也就是找到視圖的類型,如JSP)并填?參數(shù)。默認情況下,Spring MVC會?動為我們配置?個InternalResourceViewResolver,是針對 JSP 類型視圖的。
- RequestToViewNameTranslator(ViewName翻譯器)
RequestToViewNameTranslator 組件的作?是從請求中獲取 ViewName。因為 ViewResolver 根據(jù)ViewName 查找 View,但有的 Handler 處理完成之后,沒有設置 View,也沒有設置 ViewName,便要通過這個組件從請求中查找 ViewName。
- LocaleResolver(區(qū)域設置解析器)
ViewResolver 組件的 resolveViewName ?法需要兩個參數(shù),?個是視圖名,?個是 Locale。LocaleResolver ?于從請求中解析出 Locale,?如中國 Locale 是 zh-CN,?來表示?個區(qū)域。這個組件也是 i18n 的基礎。
- ThemeResolver(主題解析器)
ThemeResolver 組件是?來解析主題的。主題是樣式、圖?及它們所形成的顯示效果的集合。Spring MVC 中?套主題對應?個 properties?件,??存放著與當前主題相關的所有資源,如圖?、CSS樣式等。創(chuàng)建主題?常簡單,只需準備好資源,然后新建?個“主題名.properties”并將資源設置進去,放在classpath下,之后便可以在??中使?了。SpringMVC中與主題相關的類有ThemeResolver、ThemeSource和Theme。ThemeResolver負責從請求中解析出主題名,ThemeSource根據(jù)主題名找到具體的主題,其抽象也就是Theme,可以通過Theme來獲取主題和具體的資源。
- MultipartResolver(上傳處理器)
MultipartResolver ?于上傳請求,通過將普通的請求包裝成 MultipartHttpServletRequest 來實現(xiàn)。MultipartHttpServletRequest 可以通過 getFile() ?法 直接獲得?件。如果上傳多個?件,還可以調? getFileMap()?法得到Map<FileName,F(xiàn)ile>這樣的結構,MultipartResolver 的作?就是封裝普通的請求,使其擁有?件上傳的功能。
- FlashMapManager(傳輸參數(shù)管理器)
FlashMap ?于重定向時的參數(shù)傳遞,?如在處理?戶訂單時候,為了避免重復提交,可以處理完post請求之后重定向到?個get請求,這個get請求可以?來顯示訂單詳情之類的信息。這樣做雖然可以規(guī)避?戶重新提交訂單的問題,但是在這個??上要顯示訂單的信息,這些數(shù)據(jù)從哪?來獲得呢?因為重定向時么有傳遞參數(shù)這?功能的,如果不想把參數(shù)寫進URL(不推薦),那么就可以通過FlashMap來傳遞。只需要在重定向之前將要傳遞的數(shù)據(jù)寫?請求(可以通過ServletRequestAttributes.getRequest()?法獲得)的屬性OUTPUT_FLASH_MAP_ATTRIBUTE中,這樣在重定向之后的Handler中Spring就會?動將其設置到Model中,在顯示訂單信息的??上就可以直接從Model中獲取數(shù)據(jù)。FlashMapManager 就是?來管理 FalshMap 的。
到此這篇關于Spring MVC請求處理流程和九大組件的文章就介紹到這了,更多相關Spring MVC請求處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中的字符型文件流FileReader和FileWriter詳細解讀
這篇文章主要介紹了Java中的字符型文件流FileReader和FileWriter詳細解讀,與字節(jié)型文件流不同,字節(jié)型文件流讀取和寫入的都是一個又一個的字節(jié),而字符型文件流操作的單位是一個又一個的字符,字符型流認為一個字母是一個字符,而一個漢字也是一個字符,需要的朋友可以參考下2023-10-10
java compare compareTo方法區(qū)別詳解
本文主要介紹了java compare compareTo方法區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
SpringBoot2 整合Nacos組件及環(huán)境搭建和入門案例解析
這篇文章主要介紹了SpringBoot2 整合Nacos組件,環(huán)境搭建和入門案例詳解,在整合springboot2時注意版本 0.2.x.RELEASE 對應的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 對應的是 Spring Boot 1.x 版本,具體內容詳情跟隨小編一起看看吧2022-03-03
Spring MVC中使用Google kaptcha驗證碼的方法詳解

