自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring MVC工作流程,你學會了嗎?

開發(fā) 架構(gòu)
ServletRequestAttributes.getRequest()方法獲得)的屬性OUTPUT_FLASH_MAP_ATTRIBUTE中,這樣在重定向之后的Handler中Spring就會自動將其設置到Model中,在顯示訂單信息的?面上就可以直接從Model中獲取數(shù)據(jù)。

一、需求開發(fā)過程

需求:前端瀏覽器請求url:http://localhost:8080/demo/handle01,前端?面顯示后臺服務器的時間

開發(fā)過程

1)配置DispatcherServlet前端控制器

2)開發(fā)處理具體業(yè)務邏輯的Handler(@Controller、@RequestMapping)

3)xml配置文件配置controller掃描,配置springmvc三大件

4)將xml文件路徑告訴springmvc(DispatcherServlet)

二、Spring MVC 請求處理流程

流程說明

第一步:用戶發(fā)送請求至前端控制器DispatcherServlet

第二步:DispatcherServlet收到請求調(diào)用HandlerMapping處理器映射器

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

第四步:DispatcherServlet調(diào)用HandlerAdapter處理器適配器去調(diào)用Handler

第五步:處理器適配器執(zhí)行Handler

第六步:Handler執(zhí)行完成給處理器適配器返回ModelAndView

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

第八步:前端控制器請求視圖解析器去進行視圖解析,根據(jù)邏輯視圖名來解析真正的視圖。

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

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

第十一步:前端控制器向用戶響應結(jié)果

三、Spring MVC 九大組件

  • HandlerMapping(處理器映射器)

HandlerMapping 是用來查找 Handler 的,也就是處理器,具體的表現(xiàn)形式可以是類,也可以是方法。比如,標注了@RequestMapping的每個方法都可以看成是一個Handler。Handler負責具體實際的請求處理,在請求到達后,HandlerMapping 的作用便是找到請求相應的處理器Handler 和 Interceptor.

  • HandlerAdapter(處理器適配器)

HandlerAdapter 是一個適配器。因為 Spring MVC 中 Handler 可以是任意形式的,只要能處理請求即可。

但是把請求交給Servlet 的時候,由于Servlet 的方法結(jié)構(gòu)都是doService(HttpServletRequest req,HttpServletResponse resp)形式的,要讓固定的 Servlet 處理方法調(diào)用 Handler 來進行處理,便是 HandlerAdapter 的職責。

  • HandlerExceptionResolver

HandlerExceptionResolver 用于處理 Handler 產(chǎn)生的異常情況。它的作用是根據(jù)異常設置ModelAndView,之后交給渲染方法進行渲染,渲染方法會將 ModelAndView 渲染成?面。

  • ViewResolver

ViewResolver即視圖解析器,用于將String類型的視圖名和Locale解析為View類型的視圖,只有一個resolveViewName()方法。從方法的定義可以看出,Controller層返回的String類型視圖名viewName 最終會在這里被解析成為View。View是用來渲染?面的,也就是說,它會將程序返回的參數(shù)和數(shù)據(jù)填入模板中,生成html文件。ViewResolver 在這個過程主要完成兩件事情:ViewResolver 找到渲染所用的模板(第一件大事)和所用的技術(第二件大事,其實也就是找到視圖的類型,如JSP)并填入?yún)?shù)。默認情況下,Spring MVC會自動為我們配一個
InternalResourceViewResolver,是針對 JSP 類型視圖的。

  • RequestToViewNameTranslator

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

  • LocaleResolver

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() 方法 直接獲得文件。如果上傳多個文件,還可以調(diào)用 getFileMap()方法得到Map<FileName,F(xiàn)ile>這樣的結(jié)構(gòu),MultipartResolver 的作用就是封裝普通的請求,使其擁有文件上傳的功能。

  • FlashMapManager

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 的。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-08-14 08:42:41

2022-04-26 08:41:54

JDK動態(tài)代理方法

2024-08-09 08:17:07

SSH服務器架構(gòu)

2023-03-17 16:44:44

Channel進程模型

2022-07-11 09:00:37

依賴配置文件Mybati

2025-02-04 11:51:51

2021-10-30 18:56:12

Spring工作框架

2024-09-27 10:27:50

2024-01-02 12:05:26

Java并發(fā)編程

2023-08-01 12:51:18

WebGPT機器學習模型

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺工具

2024-01-19 08:25:38

死鎖Java通信

2022-07-08 08:17:48

Spring接口配置

2024-03-04 07:41:18

SpringAOPOOP?

2024-01-02 07:04:23

2022-06-16 07:50:35

數(shù)據(jù)結(jié)構(gòu)鏈表

2022-12-06 07:53:33

MySQL索引B+樹

2023-07-30 22:29:51

BDDMockitoAssert測試
點贊
收藏

51CTO技術棧公眾號