日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring MVC请求处理流程

發布時間:2024/8/26 javascript 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring MVC请求处理流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從web.xml中 servlet的配置開始, 根據servlet攔截的url-parttern,來進行請求轉發 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。


?
1. 當DispatcherServlet接到請求時,他先回查找適當的處理程序來處理請求。DispatcherServlet通過一個或者多個處理程序映射,將每個請求映射到處理程序中。處理程序映射配置在web應用程序的上下文中,是實現了HandlerMapping接口的Bean。它負責為請求返回一個適當的處理程序(也就是Controller)。處理程序映射通常根據請求的URL將請求映射到處理程序(Controller)。?
2. 一旦DispatcherServlet選擇了適當的控制器,它就會調用這個控制器來處理請求。?
3. 控制器處理完請求后,會將模型和視圖名(有時候是視圖對象)返回給DispatcherServlet。模型包含了控制器要傳遞給視圖進行顯示的屬性。如果返回的是視圖名稱,它會被解析成視圖對象再進行呈現。綁定模型和視圖的基本類是ModelAndView?
4. 當DispatcherServlet接收到模型和視圖名稱時,它會將邏輯視圖名稱解析成視圖對象再進行呈現。DispatcherServlet從一個或者多個視圖解析器中解析視圖。視圖解析器配置在Web應用程序上下文中,是實現了ViewResolver接口的Bean。它的任務是根據邏輯視圖名稱返回試圖對象。?
5. 一旦DispatcherServlet將視圖名稱解析稱為試圖對象,它就會呈現視圖對象,并傳遞控制器返回的模型。視圖的任務是將模型屬性展示給用戶。?

DispatcherServlet接到請求后如何映射到Controller呢??
在Spring MVC中,Web請求被Web應用程序上下文中聲明的一個或者多個處理程序映射Bean(是吸納了HandlerMapping接口的Bean)映射到Controller。Spring MVC提供了幾種HandlerMapping實現:?
1. BeanNameUrlHandlerMapping(默認情況),他根據Controller Bean名稱中指定的URL模式將請求映射到處理程序上。?
eg. <bean name="/welcome.htm" class="com.kevin.controller.WelcomeController">...</bean>?
當你訪問http://******/welcome.htm這個URL時,DispatcherServlet通過BeanNameUrlHandlerMapping映射就找到了WelcomeController。?
2. ControllerClassNameHandlerMapping,它是按控制器類名稱映射請求。?
3. SimpleUrlHandlerMapping,用定制的映射定義來映射請求。?


下面我們就來看一下Controller。?
?

Controller接口是Spring MVC中所有控制器類的基本接口。通過實現這個接口,你可以創建自己的控制器。在handleRequest()方法中,可以隨意地處理Web請求。?

AbstractController:如果你想讓控制器具備一些基本的特性,如過濾受支持的HTTP方法(GET,POST和HEAD),以及在HTTP響應中生成cache-control頭部等,你可以讓它擴展AbstractController類。?

ParameterizableViewController:用來創建帶有參數化視圖的控制器。?

SimpleFormController:它支持命令對象的概念(commandName),并且可以將表單域的值綁定到命令對象的同名屬性上。?

AbstractWizardFormController:為向導表單的處理定義了基本的任務。向導表單有多個單頁,因此必須為向導表單控制器定義多個頁面視圖。然后這個控制器可以跨越所有這些表單頁面來管理表單狀態。向導表單會有多個動作,不像SimpleFormController只有單個提交動作。AbstractWizardFormController會根據特殊的請求參數決定用戶的動作,通常是用提交按鈕的名稱來指定動作的。?
_finished: 完成向導表單。?
_cancel: 取消向導表單。?
_targetx: 進入目標頁面,這里的x是從0開始的頁面索引。?

MultiActionController:允許你將多個相關的動作分組到一個控制器中。?

常見的視圖類型:?
?

幾種常見的ViewResolver的解析:?
1. InternalResourceViewResolver: 根據URL解析視圖。通過添加前綴和后綴的方法,將每個視圖名稱都映射到一個URL上。?
2. XmlViewResolver: 從XML配置文件中解析視圖。將視圖聲明成Spring的Bean,并按他們的Bean Name進行解析。?
3. ResourceBundleViewResolver: 從ResourceBundle中解析視圖。?
4. 用多個視圖解析器解析視圖, 需要注意的是,您需要為你配置的視圖解析器配置解析的優先級。<property name="order" value="0"/> value越小,優先級越高。

轉載于:https://www.cnblogs.com/AnXinliang/p/9960799.html

總結

以上是生活随笔為你收集整理的Spring MVC请求处理流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。