天天看點

簡單講一下SpringMVC的執行流程?

流程示意圖

<a href="https://s5.51cto.com/wyfs02/M01/8D/E9/wKiom1iuq-azvywYAAFn9UG2-gE708.jpg-wh_500x0-wm_3-wmp_4-s_924717655.jpg" target="_blank"></a>

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

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

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

(這裡将去通路web.xml 中的資料)

   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 前端控制Servelt DispatcherServlet捕獲(捕獲)

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

3、 DispatcherServlet 根據獲得的Handler,選擇一個合适的HandlerAdapter。 提取Request中的模型資料,填充Handler入參,開始執行Handler(Controller), Handler執行完成後,向DispatcherServlet 傳回一個ModelAndView對象(執行handler)

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

5、通過ViewResolver 結合Model和View,來渲染視圖,DispatcherServlet 将渲染結果傳回給用戶端。(渲染傳回)

快速記憶技巧:

核心控制器捕獲請求、查找Handler、執行Handler、選擇ViewResolver,通過ViewResolver渲染視圖并傳回

      本文轉自建波李 51CTO部落格,原文連結:http://blog.51cto.com/jianboli/1900650,如需轉載請自行聯系原作者