SpringMVC框架 -- 組件及實現流程介紹

一、SpringMVC概述

1. 什麼是SpringMVC?
  SpringMVC 是一種基於 Java 的實現 MVC 設計模型的請求驅動類型的輕量級 Web 框架,屬於 SpringFrameWork 的後續產品,已經融合在 Spring Web Flow 裏面。Spring 框架提供了構建 Web 應用程序的全功能 MVC 模塊,使用 Spring 可插入的 MVC 架構,從而在使用 Spring 進行 WEB 開發時,可以選擇使用 Spring的 Spring MVC 框架或集成其他 MVC 開發框架,如 Struts2。SpringMVC 已經成爲目前最主流的 MVC 框架之一,從 Spring3.0 的發佈,就已全面超越 Struts2,成爲最優秀的MVC 框架。它通過一套註解,讓一個簡單的 Java 類成爲處理請求的控制器,而無須實現任何接口,同時它還支持RESTful 編程風格的請求。


2. SpringMVC在三層架構中的位置
三層架構


二、SpringMVC的主要組件

1. DispatcherServlet
  DispatcherServlet是前端控制器,所有的請求都經過它來統一分發。在DispatcherServlet將請求分發給Spring Controller之前,需要藉助於Spring提供的HandlerMapping定位到具體的Controller。前端控制器(DisatcherServlet)接收用戶請求,響應結果,返回可以是json、String等數據類型,也可以是頁面(Model)。DispatcherServlet 的存在降低了組件之間的耦合性。

2. HandlerMapping
  HandlerMapping是處理器映射器,負責根據用戶請求(URL)找到 Handler 即處理器, SpringMVC 提供了不同的映射器實現不同的映射方式,例如:配置文件方式,實現接口方式,註解方式等。HandlerMapping能夠完成客戶請求到Controller映射。

3. Handler
  Handler是處理器,即controller是開發中要編寫的具體業務控制器。由 DispatcherServlet 把用戶請求轉發到 Handler,由Handler 對具體的用戶請求進行處理。一旦Handler處理完用戶請求,則返回ModelAndView對象給HandlAdapter處理器適配器,ModelAndView中包含了模型(Model)和視圖(View)。

4. HandlAdapter
  HandlAdapter是處理器適配器,通過 HandlerAdapter 對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。處理器適配器可以將處理器包裝成適配器,這樣就可以支持多種類型的處理器。

5. ViewResolver
  ViewResolver是視圖解析器,負責將處理結果生成 View 視圖, View Resolver 首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成 View 視圖對象,最後對 View 進行渲染將處理結果通過頁面展示給用戶。


三、Spring MVC的工作原理

Spring MVC核心流程

具體步驟:

  • 第一步:瀏覽器發起請求到前端控制器(DispatcherServlet);

  • 第二步:前端控制器請求處理器映射器(HandlerMapping)查找 處理器(Handler) ,可以根據xml配置、註解進行查找;

  • 第三步:找到以後HandlerMapping向前端控制器返回執行鏈(HandlerExecutionChain),HandlerExecutionChain對象包含一個Handler處理器(頁面控制器)對象,多個HandlerInterceptor攔截器對象;

  • 第四步:前端控制器調用處理器適配器去執行Handler;

  • 第五步:處理器適配器HandlerAdapter將會根據適配的結果去執行Handler;

  • 第六步:Handler執行完成給適配器返回ModelAndView(ModelAndView是springmvc框架的一個底層對象,包括 Model和view);

  • 第七步:處理器適配器向前端控制器返回ModelAndView ;

  • 第八步:前端控制器請求視圖解析器(ViewResolver)去進行視圖解析 (根據邏輯視圖名解析成真正的視圖如:jsp),通過這種策略很容易更換其他視圖技術,只需要更改視圖解析器即可;

  • 第九步:視圖解析器向前端控制器返回View;

  • 第十步:前端控制器進行視圖渲染 (視圖渲染將模型數據(在ModelAndView對象中)填充到request域);

  • 第十一步:前端控制器向用戶響應結果。

四、SpringMVC總結

1、DispatcherServlet 在 web.xml 中的部署描述,從而攔截請求到 Spring Web MVC;

2、HandlerMapping 的配置,從而將請求映射到處理器;

3、HandlerAdapter 的配置,從而支持多種類型的處理器;

4、處理器(頁面控制器)的配置,從而進行功能處理 ;

5、ViewResolver 的配置,從而將邏輯視圖名解析爲具體視圖技術。