通過深入分析Spring源碼,我們知道Spring框架包括大致六大模塊, 如Web模塊,數據庫訪問技術模塊,面向切面模塊,基礎設施模塊,核心容器模塊和模塊。
其中,在Spring框架的Web模塊中,又包含很多前端技術,如SpringMVC,Spring WebSocket,Spring WebPortlet等,在本篇文章中,我們主要分析SpringMVC模塊。
在分析SpringMVC技術時,本篇文章將通過解讀SpringMVC源碼,并通過編譯器斷點調試追蹤,研究Spring核心類的UML圖,來深入剖析SpringMVC的執行過程。
一、 Spring核心模塊
下圖為Spring核心模塊,其中SpringMVC模塊位于Spring框架的Web模塊部分。
二、SpringMVC執行原理
下圖為SpringMVC的一個較完整的流程圖,實線表示SpringMVC框架提供的技術,不需要開發者實現,虛線表示需要開發者實現。
簡要分析執行流程。
1、DispatcherServlet表示前置控制器,是整個SpringMVC的控制中心。用戶發出請求,DispatcherServlet接收請求并攔截請求。
我們假設請求的url為:
http://localhost:9999/SpringMVC/input-product
如上url拆分成三部分:
http://localhost:9999 服務器域名
SpringMVC部署在服務器(http://localhost:9999)上的web站點
input-product表示控制器
通過分析,如上url表示為:請求位于服務器localhost:9999上的SpringMVC站點的input-product控制器。
2、HandlerMapping為處理器映射。DispatcherServlet調用HandlerMapping,HandlerMapping根據請求url查找Handler。
3、HandlerExecution表示具體的Handler,其主要作用是根據url查找控制器,如上url被查找控制器為:input-product。
4、HandlerExecution將解析后的信息傳遞給DispatcherServlet,如解析控制器映射等。
5、HandlerAdapter表示處理器適配器,其按照特定的規則去執行Handler。
6、Handler讓具體的Controller執行。
7、Controller將具體的執行信息返回給HandlerAdapter,如ModelAndView。
8、HandlerAdapter將視圖邏輯名或模型傳遞給DispatcherServlet。
9、DispatcherServlet調用視圖解析器(ViewResolver)來解析HandlerAdapter傳遞的邏輯視圖名。
10、視圖解析器將解析的邏輯視圖名傳給DispatcherServlet。
11、DispatcherServlet根據視圖解析器解析的視圖結果,調用具體的視圖。
12.最終視圖呈現給用戶。
三、SpringMVC核心組件
1、DispatcherServlet
DispatcherServlet就是所謂的SpringMVC前端控制器,作為整個SpringMVC的控制中心,,其相關UML如下所示:
2、HandlerMapping
HandlerMapping主要用來解析請求url,解析出控制器,從而映射控制器,其相關類有16個。
如下為HandlerMapping的UML圖
3、HandlerAdapter
HandlerAdapter主要是調度Controller來處理業務邏輯等,想相關類有6個。
如下為HandlerAdapter的UML:
4、ViewResolver
ViewResolver接口主要作用是解析DispatcherServlet傳遞的邏輯視圖名,并將解析結果傳回給DispatcherServlet。實現該接口的相關類或接口共有19個。如下為ViewResolver主要的UML。
(喜歡本篇文章的朋友可以關注支持下哦,我每周會不定時更新幾篇精品文章哦。)