文章目錄
- 一、Java Web的發展歷程
- 1.Model I與Model II開發模式
- (1) Model I開發模式
- (2)Model II開發模式
- 2.MVC設計模式
- Spring MVC本質
- MVC工作流程
- 二、Spring MVC快速入門實戰
- 1.環境搭建步驟
- (1)創建Maven Web工程
- (2)配置web.xml
- (3) Spring MVC配置文件(springmvc.xml)
- (4) 編寫Controller
- (5) 創建視圖頁面
- 三、Spring MVC核心原理剖析
- 1.請求處理全流程
- (1)DispatcherServlet接收請求
- (2)HandlerAdapter執行方法
- (3)處理返回結果
- (4)視圖渲染
- 2.核心組件詳解
- (1)Spring MVC 核心組件功能表
- (2)組件協作示意圖
- 3.架構優勢分析
- 總結
一、Java Web的發展歷程
1.Model I與Model II開發模式
(1) Model I開發模式
核心架構:JSP + JavaBean
流程特點:
- JSP頁面直接處理用戶請求、執行業務邏輯(通過JavaBean)并渲染頁面
- 優點:快速開發小型項目
- 致命缺陷:視圖展示與業務邏輯高度耦合,JSP文件臃腫,維護困難
瀏覽器請求 → JSP接收請求 → 調用JavaBean → JSP渲染響應
(2)Model II開發模式
核心架構:JSP + Servlet + JavaBean
分層思想:
- JSP:專注視圖渲染
- Servlet:負責流程控制(Controller前身)
- JavaBean:處理業務邏輯(Service/DAO層)
瀏覽器請求 → Servlet接收 → 調用JavaBean → 轉發結果至JSP → 渲染響應
劃時代意義:首次實現MVC分層,支持中大型項目開發(2000年代主流架構)
2.MVC設計模式
Spring MVC本質
Spring MVC本質:基于Servlet的增強框架,核心思想遵循MVC規范
組件 | 核心職責 | 實現示例 |
---|---|---|
Model | 1. 處理業務邏輯 2. 封裝數據對象 | - @Service 標注的業務類- 實體類(如 User.java )- DAO層實現類 |
View | 1. 數據可視化展示 2. 用戶交互界面 | - JSP頁面(*.jsp )- Thymeleaf模板( *.html )- JSON響應( @ResponseBody ) |
Controller | 1. 接收請求 2. 調用業務層 3. 返回響應 | - @Controller 注解類- @RequestMapping 方法(如 /user/login 映射) |
MVC工作流程
- 用戶通過View發起請求
- Controller接收并解析請求參數
- 調用Model層處理業務邏輯
- 返回處理結果至View渲染
二、Spring MVC快速入門實戰
1.環境搭建步驟
(1)創建Maven Web工程
關鍵依賴:
<dependencies><!-- Spring MVC核心 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.18</version></dependency><!-- 視圖模板引擎 --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.14.RELEASE</version></dependency><!-- Servlet API --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency>
</dependencies>
(2)配置web.xml
核心配置項:
<!-- 字符編碼過濾器 -->
<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter><!-- DispatcherServlet配置 -->
<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet><!-- 映射規則 -->
<servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
(3) Spring MVC配置文件(springmvc.xml)
<!-- 組件掃描 -->
<context:component-scan base-package="com.example.controller"/><!-- Thymeleaf視圖解析 -->
<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".html"/><property name="templateMode" value="HTML5"/>
</bean><bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver" ref="templateResolver"/>
</bean><bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><property name="templateEngine" ref="templateEngine"/><property name="characterEncoding" value="UTF-8"/>
</bean><!-- 開啟注解驅動 -->
<mvc:annotation-driven/>
(4) 編寫Controller
@Controller
public class HelloController {@RequestMapping("/hello")public String sayHello(Model model) {model.addAttribute("message", "Welcome to Spring MVC!");return "result"; // 對應/WEB-INF/views/result.html}
}
(5) 創建視圖頁面
result.html(Thymeleaf模板):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Result Page</title>
</head>
<body><h1 th:text="${message}">Default Message</h1>
</body>
</html>
三、Spring MVC核心原理剖析
1.請求處理全流程
(1)DispatcherServlet接收請求
- 作為統一入口攔截所有請求
- 通過HandlerMapping查找匹配的Controller方法
(2)HandlerAdapter執行方法
- 參數綁定:自動將請求參數映射到方法參數
- 執行@RequestMapping標注的方法
(3)處理返回結果
- 返回String:通過ViewResolver解析為具體視圖
- 返回@ResponseBody:直接序列化為JSON
(4)視圖渲染
- 模板引擎處理動態內容
- 生成最終HTML響應
2.核心組件詳解
(1)Spring MVC 核心組件功能表
組件名稱 | 職責說明 | 實現示例 |
---|---|---|
DispatcherServlet | 前端控制器,統一處理所有HTTP請求和響應,協調各組件工作流程 | 在web.xml 中配置的核心Servlet,默認名稱dispatcher ,處理所有/ 請求 |
HandlerMapping | 建立請求URL與Controller方法的映射關系 | RequestMappingHandlerMapping (基于@RequestMapping 注解的映射策略) |
HandlerAdapter | 實際執行Controller方法,處理參數綁定、數據轉換、驗證等核心邏輯 | RequestMappingHandlerAdapter (支持基于注解的處理器方法) |
ViewResolver | 將Controller返回的邏輯視圖名解析為具體的視圖實現(HTML/JSON等) | InternalResourceViewResolver (JSP)、ThymeleafViewResolver (模板引擎) |
HandlerExceptionResolver | 統一處理Controller層拋出的異常,返回定制化錯誤響應 | ExceptionHandlerExceptionResolver (配合@ExceptionHandler 使用) |
(2)組件協作示意圖
3.架構優勢分析
- 松耦合設計:各組件通過接口定義,易于擴展
- 注解驅動開發:@Controller、@RequestMapping簡化配置
- 強大的數據綁定:自動處理表單數據、JSON轉換
- 視圖技術無關性:支持JSP、Thymeleaf、FreeMarker等
總結
Spring MVC通過清晰的層次劃分和強大的擴展能力,已成為Java Web開發的事實標準。理解其核心原理并掌握配置技巧,是構建高性能Web應用的關鍵。建議通過Debug模式跟蹤請求處理流程,深入體會各組件協作機制。