SpringMVC流程圖


 

注意:pretHandle如果返回false,表示攔截請求,后面的都不會再執行。postHandle沒有異常時執行,有異常時不會執行。

HandlerMapping中存儲了所有的請求和處理器的關系,HandlerExecutionChain處理某一個請求與處理器的關系,HandlerAdapter處理器適配器,來對處理器進行調用。

Spring工作流程描述
1) 用戶向服務器發送請求,請求被SpringMVC 前端控制器 DispatcherServlet捕獲;
2) DispatcherServlet對請求URL進行解析,得到請求資源標識符(URI):
  判斷請求URI對應的映射
    ① 不存在:
       再判斷是否配置了mvc:default-servlet-handler:
       如果沒配置,則控制台報映射查找不到,客戶端展示404錯誤
       如果有配置,則執行目標資源(一般為靜態資源,如:JS,CSS,HTML)
    ② 存在:
執行下面流程
  3) 根據該URI,調用HandlerMapping獲得該Handler配置的所有相關的對象(包括Handler對象以及Handler對象對應的攔截器),最后以HandlerExecutionChain對象的形式返回;
  4) DispatcherServlet 根據獲得的Handler,選擇一個合適的HandlerAdapter。
  5) 如果成功獲得HandlerAdapter后,此時將開始執行攔截器的preHandler(...)方法【正向】
  6) 提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)方法,處理請求。在填充Handler的入參過程中,根據你的配置,Spring將幫你做一些額外的工作:
    ① HttpMessageConveter: 將請求消息(如Json、xml等數據)轉換成一個對象,將對象轉換為指定的響應信息
    ② 數據轉換:對請求消息進行數據轉換。如String轉換成Integer、Double等
    ③ 數據格式化:對請求消息進行數據格式化。 如將字符串轉換成格式化數字或格式化日期等
    ④ 數據驗證: 驗證數據的有效性(長度、格式等),驗證結果存儲到BindingResult或Error中
  7) Handler執行完成后,向DispatcherServlet返回一個ModelAndView對象;
  8) 此時將開始執行攔截器的postHandle(...)方法【逆向】
  9) 根據返回的ModelAndView(此時會判斷是否存在異常:如果存在異常,則執行HandlerExceptionResolver進行異常處理)選擇一個適合的ViewResolver(必須是已經注冊到Spring容器中的ViewResolver)返回給DispatcherServlet,根據Model和View,來渲染視圖
  10) 在返回給客戶端時需要執行攔截器的AfterCompletion方法【逆向】
  11) 將渲染結果返回給客戶端

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM