圖一:
圖二:
執行流程的源代碼分析,序列圖:
(1)瀏覽器提交請求到中央調度器
(2)中央調度器直接將請求轉給處理器映射器。
(3)處理器映射器會根據請求,找到處理該請求的處理器,并將其封裝為處理器執行鏈后,返回給中央調度器。
(4)中央調度器根據處理器執行鏈中的處理器,找到能夠執行該處理器的處理器適配器。
(5)處理器適配器調用執行處理器。
(6)處理器將處理結果及要跳轉的視圖封裝到一個對象 ModelAndView 中,并將其返回給處理器適配器。
(7)處理器適配器直接將結果返回給中央調度器。
(8)中央調度器調用視圖解析器,將 ModelAndView 中的視圖名稱封裝為視圖對象。
(9)視圖解析器將封裝了的視圖對象返回給中央調度器
(10)中央調度器調用視圖對象,讓其自己進行渲染,即進行數據填充,形成響應對象。
(11)中央調度器響應瀏覽器。
(1) DispatcherServlet (不需要程序員開發)
中央調度器,也稱為前端控制器,在 MVC 架構模式中充當控制器 C,DispatcherServlet是整個流程的控制中心,由它調用諸如處理器映射器、處理器適配器、視圖解析器等其它組件處理用戶請求。中央調度器的存在降低了組件之間的耦合度。
(2) HandlerMapping (不需要程序員開發)
處理器映射器,負責根據用戶請求找到相應的將要執行的 Handler,即處理器。即用于完成將用戶請求映射為要處理該請求的處理器,并將處理器封裝為處理器執行鏈傳給中央調度器。
(3) HandlAdapter(不需要程序員開發)
處理器適配器,通過 HandlerAdapter 對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。中央調度器會根據不同的處理器自動為處理器選擇適配器,以執行處理器。
(4) Handler (需要程序員開發),即 Controller
處理器,也稱為后端控制器,在 DispatcherServlet 的控制下 Handler 調用 Service 層對具體的用戶請求進行處理。由于 Handler 涉及到具體的用戶業務請求,所以一般情況下需要程序員根據業務需求自己開發 Handler。
(5) ViewResolver (不需要程序員開發)
視圖解析器,負責將處理結果生成 View 視圖,ViewResolver 首先將邏輯視圖名解析為物理視圖名,即具體的頁面地址,再生成 View 視圖對象。最后將處理結果通過頁面形式展示給用戶。
(6) View (需要程序員開發 jsp 頁面)
SpringMVC 框架提供了很多的 View 視圖類型。一般情況下需要通過頁面標簽或頁面模版技術將模型數據通過頁面展示給用戶,需要由程序員根據業務需求開發具體的頁面。
第一個 SpringMVC 的程序已經可以正確運行了。但發現一個問題:在流程介紹中所述的重要的處理器映射器、處理器適配器、視圖解析器等,都在哪里,不用做配置嗎?
當然不是!這些內容均在 DispatcherServlet 的默認配置 DispatcherServlet.properties 文件中被定義。這個文件與 DispatcherServlet 類在一個包下,而且是當 Spring 配置文件中沒有指定配置時使用的默認情況。
從上面的內容可知,這些組件的默認配置如下: