1. 程式人生 > 遊戲 >時空操作《無窮時線》5月19日發售 扮演特工修復受損點

時空操作《無窮時線》5月19日發售 扮演特工修復受損點

Spring MVC 執行流程

Spring MVC整個流程分成三個階段

  • 準備階段
  • 匹配階段
  • 執行階段

準備階段

  1. 在 Web 容器第一次用到 DispatcherServlet 的時候,會建立其物件並執行 init 方法

  2. init 方法內會建立 Spring Web 容器,並呼叫容器 refresh 方法

  3. refresh 過程中會建立並初始化 SpringMVC 中的重要元件, 例如 MultipartResolver,HandlerMapping,HandlerAdapter,HandlerExceptionResolver、ViewResolver 等

  4. 容器初始化後,會將上一步初始化好的重要元件,賦值給 DispatcherServlet 的成員變數,留待後用

匹配階段

  1. 使用者傳送的請求統一到達前端控制器 DispatcherServlet

  2. DispatcherServlet 遍歷所有 HandlerMapping ,找到與路徑匹配的處理器

    ① HandlerMapping 有多個,每個 HandlerMapping 會返回不同的處理器物件,誰先匹配,返回誰的處理器。其中能識別 @RequestMapping 的優先順序最高

    ② 對應 @RequestMapping 的處理器是 HandlerMethod,它包含了控制器物件和控制器方法資訊

    ③ 其中路徑與處理器的對映關係在 HandlerMapping 初始化時就會建立好

  1. 將 HandlerMethod 連同匹配到的攔截器,生成呼叫鏈物件 HandlerExecutionChain 返回
  1. 遍歷HandlerAdapter 處理器介面卡,找到能處理 HandlerMethod 的介面卡物件,開始呼叫

呼叫階段

  1. 執行攔截器 preHandle
  1. 由 HandlerAdapter 呼叫 HandlerMethod

    ① 呼叫前處理不同型別的引數

    ② 呼叫後處理不同型別的返回值

  1. 第 2 步沒有異常

    ① 返回 ModelAndView

    ② 執行攔截器 postHandle 方法

    ③ 解析檢視,得到 View 物件,進行檢視渲染

  1. 第 2 步有異常,進入 HandlerExceptionResolver 異常處理流程
  1. 最後都會執行攔截器的 afterCompletion 方法

  2. 如果控制器方法標註了 @ResponseBody 註解,則在第 2 步,就會生成 json 結果,並標記 ModelAndView 已處理,這樣就不會執行第 3 步的檢視渲染