說到java的mvc框架,struts2和springmvc想必大家都知道,struts2的設計基本上完全脫離了Servlet容器,而springmvc是依托着Servlet容器元素來設計的,同時springmvc基於Spring框架,Spring框架想必搞java的同學都很熟悉。
一進Spring的官網就發現了這樣一排醒目的文字, spring可以讓我們構造簡單的、便攜的、又快又易於擴展的基於jvm的系統和應用程序。
沒錯,基於Spring的MVC框架SpringMVC同樣也可以構造具有這些特性的系統。
樓主從5.1開始寫的第一篇《SpringMVC入門》開始,到現在差不多將近2個月的時間,之后陸陸續續寫了幾篇關於SpringMVC的源碼分析文章。
有同學想研究SpringMVC源碼或想深入學習一下SpringMVC的話,可以參考本系列文章。
廢話不多說,本系列的文章都是基於Spring4.0.2版本的,樓主寫的時候出到了4.0.2,也是最新的,現在的最新版本是4.0.5。
文章閱讀順序:
1. SpringMVC入門
SpringMVC的入門文章, 對於某些沒接觸過SpringMVC的同學來說,可以閱讀以下,了解這個框架的結構以及使用,以入門的同學可以選擇不看~
2. SpringMVC核心分發器DispatcherServlet分析
SpringMVC入口Servlet -> DispatcherServlet的分析,解釋了DispatcherServlet的父類FrameworkServlet以及FrameworkServlet的父類HttpServletBean的作用
3. 詳解SpringMVC請求的時候是如何找到正確的Controller
想知道http請求是如何找到對應Controller中的方法的嗎,這個過程當中到底發生了什么,你知道嗎? 本篇將為你一一解答。
4. 詳解SpringMVC中Controller的方法中參數的工作原理
同學們有想過http請求找到對應Controller中的方法之后,方法中的參數是如何被注入進來的嗎?比如:
public String method(HttpServletRequest request, String name) {
...
}
這里的HttpServletRequest類型的request參數以及String類型的name參數是如何自動被注入到method方法中的? 主要是兩個重要的接口的作用:HandlerMethodArgumentResolver(請求參數處理)和HandlerMethodReturnValueHandler(返回值處理)。文中還寫了一個自定義的HandlerMethodArgumentResolver接口實現類FormObjArgumentResolver,該類處理Controller方法中多個自定義類參數的處理(建議看完類型轉換文章后再看這個類的具體實現代碼)。
5. SpringMVC關於json、xml自動轉換的原理研究
通過json、xml的自動轉換鞏固第四篇文章的知識,自動轉換由RequestResponseBodyMethodProcessor處理,該類實現了HandlerMethodArgumentResolver和HandlerMethodReturnValueHandler接口。
介紹了屬性編輯器的概念以及Spring對屬性編輯器的支持,本文知識消化之后可以回過頭看第4篇中FormObjArgumentResolver的實現。
解釋了SpringMVC攔截器的設計原理。
分析了SpringMVC的視圖機制,主要也就是講解View和ViewResolver這兩個接口的作用。寫完之后還寫了篇關於重定向視圖RedirectView的小吐槽:SpringMVC重定向視圖RedirectView小分析。
解釋了SpringMVC異常機制的設計原理。
額外知識:
有同學想了解本系列沒講到的知識的話,如果覺得合適,樓主會繼續寫關於這些內容的博客的。
目前這些博客已經放到了github上: https://github.com/fangjian0423/springmvc-source-minibook
也可以在線閱讀,或者下載pdf,moni,epub:https://www.gitbook.com/book/fangjian0423/springmvc-source-minibook/details
最后附上Spring4.0.2官方文檔:http://docs.spring.io/spring/docs/4.0.2.RELEASE/spring-framework-reference/htmlsingle/
------ 2017.07.28 21:20:21 更新,畫了個SpringMVC的處理流程圖