帶著問題學 Spring MVC 原始碼: 一、概述
摘要: 原創出處:www.bysocket.com 泥瓦匠BYSocket 希望轉載,保留摘要,謝謝!
簡單就好,生活可以很德國
Q:什麼是 Spring MVC ? ※
Spring MVC 是 Spring Web 的一個重要模組。Spring 支援 Web 應用,Spring MVC 是對 MVC 模式的支援。
Q:MVC 模式? ※
MVC 模式是種經典的軟體架構,分 Model 模型、View 檢視及 Controller 控制器 三種角色。架構的意圖明顯區分三種角色的職責,使其不相互依賴。Java 領域最經典的實現 JSP + Servlet + JavaBean,後續也陸續出來了眾多優秀框架,SSH 中的 Struts ,還有 SSM 中的 Spring MVC 等。
Q: Spring 還要什麼其他模組? Web?IOC 容器?AOP?※
IOC 容器模組、AOP 模組都是。還有資料訪問/整合、Web 等模組都是。這裡其他不展開講,其中 Web 模組建立在 IOC 容器之上,要記住。
Q: Web 模組包含 springmvc 嗎? ※
包含。Web 模組包含 spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet。其中 web-mvc 是我們要學習原始碼包。
1. spring-web 模組提供基本 Web 整合功能,包括初始化 IOC 容器等工作。
2. spring-webmvc 包含 MVC 模式的實現和 REST Web 服務的實現。該模組基於了 spring-web 模組。
資料來源自:官方文件 MVC 章節,其他模組具體參考官網。
Q: spring-webmvc 模組具體包含什麼內容? ※
spring-webmvc 模組裡面包:
- org.springframework.web.servlet
提供與應用程式上下文基礎結構整合的 Servlet,以及 Spring web MVC 框架的核心介面和類。- org.springframework.web.servlet.mvc
Spring 附帶的 Servlet MVC 框架的標準控制器實現。
- org.springframework.web.servlet.mvc.annotation
用於基於註解的 Servlet MVC 控制器的支援包。- org.springframework.web.servlet.mvc.condition
用於根據條件匹配傳入請求的公共 MVC 邏輯。- org.springframework.web.servlet.mvc.method
用於處理程式方法處理的基於 Servlet 的基礎結構,基於在 org.springframework.web.method 包上。- org.springframework.web.servlet.view
提供標準的 View 和 ViewResolver 實現,包括自定義實現的抽象基類。
- org.springframework.web.servlet.view.freemarker
支援將 FreeMarker 整合為 Spring Web 檢視技術的類。- org.springframework.web.servlet.view.json
支援提供基於 JSON 序列化的 View 實現的類。上面列出來核心的包。org.springframework.web.servlet.view 包中, View 檢視實現有常見的:JSON 、FreeMarker 等。org.springframework.web.servlet.mvc 包中,Controller 控制層實現包括了註解、程式方法處理等封裝。自然,看原始碼先從 org.springframework.web.servlet 包看其核心的介面和類。
Q: 核心類和介面有哪些? ※
DispatcherServlet 類:排程HTTP請求控制器(或者處理器Handler)。
View 檢視層
ModelAndView 類:模型和檢視的持有者。
View 介面:MVC WEB 互動。該介面的實現負責呈現檢視或者暴露模型。
Controller 控制層
HandlerMapping 介面: 請求從 DispacherServlet 過來,該介面定義請求和處理程式物件之間的對映。
HandlerInterceptor 介面:處理程式的執行連結口。
Q: 又是 MVC 的樣子,還有嗎? ※
哦。對了還有張圖:
所以重要的類還有 ViewResolver、HandleAdapter等。
Q: 謝謝,下篇聊什麼?
當然聊重要類的原始碼實現咯~,下篇見。
如以上文章或連結對你有幫助的話,別忘了在文章結尾處評論哈~ 你也可以點選頁面右邊“分享”懸浮按鈕哦,讓更多的人閱讀這篇文章。