時空操作《無窮時線》5月19日發售 扮演特工修復受損點
Spring MVC 執行流程
Spring MVC整個流程分成三個階段
- 準備階段
- 匹配階段
- 執行階段
準備階段
-
在 Web 容器第一次用到 DispatcherServlet 的時候,會建立其物件並執行 init 方法
-
init 方法內會建立 Spring Web 容器,並呼叫容器 refresh 方法
-
refresh 過程中會建立並初始化 SpringMVC 中的重要元件, 例如 MultipartResolver,HandlerMapping,HandlerAdapter,HandlerExceptionResolver、ViewResolver 等
-
容器初始化後,會將上一步初始化好的重要元件,賦值給 DispatcherServlet 的成員變數,留待後用
匹配階段
-
使用者傳送的請求統一到達前端控制器 DispatcherServlet
-
DispatcherServlet 遍歷所有 HandlerMapping ,找到與路徑匹配的處理器
① HandlerMapping 有多個,每個 HandlerMapping 會返回不同的處理器物件,誰先匹配,返回誰的處理器。其中能識別 @RequestMapping 的優先順序最高
② 對應 @RequestMapping 的處理器是 HandlerMethod,它包含了控制器物件和控制器方法資訊
③ 其中路徑與處理器的對映關係在 HandlerMapping 初始化時就會建立好
- 將 HandlerMethod 連同匹配到的攔截器,生成呼叫鏈物件 HandlerExecutionChain 返回
- 遍歷HandlerAdapter 處理器介面卡,找到能處理 HandlerMethod 的介面卡物件,開始呼叫
呼叫階段
- 執行攔截器 preHandle
-
由 HandlerAdapter 呼叫 HandlerMethod
① 呼叫前處理不同型別的引數
② 呼叫後處理不同型別的返回值
-
第 2 步沒有異常
① 返回 ModelAndView
② 執行攔截器 postHandle 方法
③ 解析檢視,得到 View 物件,進行檢視渲染
- 第 2 步有異常,進入 HandlerExceptionResolver 異常處理流程
-
最後都會執行攔截器的 afterCompletion 方法
-
如果控制器方法標註了 @ResponseBody 註解,則在第 2 步,就會生成 json 結果,並標記 ModelAndView 已處理,這樣就不會執行第 3 步的檢視渲染