天天看點

Spring MVC工作流程以及請求處理流程

SpringMVC主要是通過前端控制器controller中的注解來完成請求處理的。前段請求從web.xml中servlet的配置開始,根據servlet攔截的url-parttern,來進行請求轉發控制。

處理請求的流程

Spring MVC工作流程以及請求處理流程

具體執行步驟如下:

1、首先使用者發送請求————>前端控制器,前端控制器根據請求資訊(如URL)來決定選擇哪一個頁面控制器進行處理并把請求委托給它,即以前的控制器的控制邏輯部分;圖2-1中的1、2步驟;

2、頁面控制器接收到請求後,進行功能處理,首先需要收集和綁定請求參數到一個對象,這個對象在Spring Web MVC中叫指令對象,并進行驗證,然後将指令對象委托給業務對象進行處理;處理完畢後傳回一個ModelAndView(模型資料和邏輯視圖名);圖2-1中的3、4、5步驟;

3、前端控制器收回控制權,然後根據傳回的邏輯視圖名,選擇相應的視圖進行渲染,并把模型資料傳入以便視圖渲染;圖2-1中的步驟6、7;

4、前端控制器再次收回控制權,将響應傳回給使用者,圖2-1中的步驟8;至此整個結束。

工作流程

Spring MVC工作流程

Spring MVC工作流程以及請求處理流程

工作流程描述如下:

使用者向伺服器發送請求,請求被Spring 前端控制Servelt DispatcherServlet捕獲;

DispatcherServlet對請求URL進行解析,得到請求資源辨別符(URI)。然後根據該URI,調用HandlerMapping獲得該Handler配置的所有相關的對象(包括Handler對象以及Handler對象對應的攔截器),最後以HandlerExecutionChain對象的形式傳回;

DispatcherServlet 根據獲得的Handler,選擇一個合适的HandlerAdapter。(附注:如果成功獲得HandlerAdapter後,此時将開始執行攔截器的preHandler(…)方法)

提取Request中的模型資料,填充Handler入參,開始執行Handler(Controller)。 在填充Handler的入參過程中,根據你的配置,Spring将幫你做一些額外的工作:

HttpMessageConveter: 将請求消息(如Json、xml等資料)轉換成一個對象,将對象轉換為指定的響應資訊資料轉換:對請求消息進行資料轉換。如String轉換成Integer、Double等資料根式化:對請求消息進行資料格式化。 如将字元串轉換成格式化數字或格式化日期等資料驗證: 驗證資料的有效性(長度、格式等),驗證結果存儲到BindingResult或Error中.

Handler執行完成後,向DispatcherServlet 傳回一個ModelAndView對象;

根據傳回的ModelAndView,選擇一個适合的ViewResolver(必須是已經注冊到Spring容器中的ViewResolver)傳回給DispatcherServlet ;

ViewResolver 結合Model和View,來渲染視圖

将渲染結果傳回給用戶端。