經過深刻分析Spring源碼,咱們知道Spring框架包括大體六大模塊, 如Web模塊,數據庫訪問技術模塊,面向切面模塊,基礎設施模塊,核心容器模塊和模塊,前端
其中,在Spring框架的Web模塊中,又包含不少前端技術,如SpringMVC,Spring WebSocket,Spring WebPortlet等,在本篇文章中,咱們主要分析SpringMVC模塊,web
在分析SpringMVC技術時,本篇文章將經過解讀SpringMVC源碼,並經過編譯器斷點調試追蹤,研究Spring核心類的UML圖,來深刻剖析SpringMVC的執行過程。數據庫
一 Spring核心模塊服務器
下圖爲Spring核心模塊,其中SpringMVC模塊位於Spring框架的Web模塊部分架構
若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。app
二 SpringMVC執行原理框架
下圖爲SpringMVC的一個較完整的流程圖,實線表示SpringMVC框架提供的技術,不須要開發者實現,虛線表示須要開發者實現。分佈式
簡要分析執行流程:微服務
1.DispatcherServlet表示前置控制器,是整個SpringMVC的控制中心。用戶發出請求,DispatcherServlet接收請求並攔截請求,源碼分析
咱們假設請求的url爲:
http://localhost:9999/SpringMVC/input-product
如上url拆分紅三部分:
(1)http://localhost:9999 服務器域名
(2)SpringMVC部署在服務器(http://localhost:9999)上的web站點
(3)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核心組件
(一)DispatcherServlet
DispatcherServlet就是所謂的SpringMVC前端控制器,做爲整個SpringMVC的控制中心,,其相關UML以下所示:
(二)HandlerMapping
HandlerMapping主要用來解析請求url,解析出控制器,從而映射控制器,其相關類有16個。
以下爲HandlerMapping的UML圖
(三)HandlerAdapter
HandlerAdapter主要是調度Controller來處理業務邏輯等,想相關類有6個。
以下爲HandlerAdapter的UML:
(四)ViewResolver
ViewResolver接口主要做用是解析DispatcherServlet傳遞的邏輯視圖名,並將解析結果傳回給DispatcherServlet。實現該接口的相關類或接口共有19個。
以下爲ViewResolver主要的UML:
歡迎工做一到八年的Java工程師朋友們加入Java高級交流:854630135
本羣提供免費的學習指導 架構資料 以及免費的解答
不懂得問題均可以在本羣提出來 以後還會有直播平臺和講師直接交流噢