流程示意圖
<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,如需轉載請自行聯系原作者