Spring MVC

https://xie.infoq.cn/article/118d19a4ca5de87163de4942c

簡單介紹

提供了 MVC體系結構 ( Model - View - Controller ) 和 現成的組件,可用於開發靈活且鬆散耦合的 Web 應用。

MVC 模式分離了應用的不同方面 (輸入邏輯、業務邏輯、 UI邏輯等等)。

優勢

  • 各個角色清楚分離 –控制器、驗證器、模型對象,處理程序映射,視圖解析器等等。 每個角色都可以透過專門的對象 (Bean) 來實現。

  • 可以自行定義驗證器 / View 映射處理 / 語系 / 主題 等等。

  • 能夠透過 properties 來配置。

  • 減少重複的程式和業務,達到複用的效果。

分派器 DispatcherServlet

工作流程

1. 請求向 Server 發送,前端控制器(Front Controller, 一種設計模式) DispatcherServlet 接收。

2. DispatcherServlet 根據 xxx-servlet.xml 中的配置,對請求 URL 進行解析後得到請求 URI

接著調用 HandlerMapping 獲得該 Handler 配置的所有相關對象及對應的攔截器,

完成後,以 HandlerExecutionChain 對象的形式返回。

3. DispatcherServlet 根據上面 Mapping 獲得的 Handler (Controller),

選擇一個合適的HandlerAdapter,並開始執行對應的攔截器的 preHandler() 方法

4. 開始執行 Handler ,針對 Request 模型塞入參數, 過程中 Spring 還會做一些額外處理 :

4.1 資料型態轉換: String 轉換成 int 、long 、Date 等等。 4.2 資料驗證: 資料是否有效 (@Vaild),並將驗證結果塞入 BindingResult 的 error 中。 4.3 資料格式化: 字符串轉換成格式化數字或格式化日期。

5. Handler (Controller) 執行完成後,會向 前端控制器 返回一組 ModelAndView 對象。

6. 前端控制器 根據返回的 ModelAndView 找到適合的 ViewResolver 。

7. ViewResolver 透過 Model 渲染 View 回應給 Client。

其他特殊的解析器

除了基本的 HandlerMapping 和 HandlerAdapter,Spring 還有內置的解析器。

依照特殊的請求做出不同的回應,並且也可以透過屬性擴展或替換掉。

Resolver

敘述

異常 - HandlerExceptionResolver

解決異常的策略,在發生錯誤時,將其引導到錯誤視圖或其他目標。

視圖 - ViewResolver

將處理程序的回傳值 String ,轉成其資源對應的 View。

時區 - LocaleResolver

解決 Client 正在使用的時區問題,以配合國際化的環境。

模板佈局 - ThemeResolver

解決 web 應用可以使用的模板

檔案 - MultipartResolver

解決 web 應用的檔案上傳

重導 - FlashMapManager

解決 web 應用從一個請求跨越到另一個請求臨時參數。

Last updated

Was this helpful?