前言
在 Java Web 开发的演进历程中,SpringMVC 凭借解耦、简洁、高效的特性,成为主流 Web 开发框架。它基于 MVC 设计模式,是 Spring 家族的核心 Web 模块,彻底简化了原生 Servlet 的开发流程。本文结合实战代码,全面讲解 SpringMVC 从搭建到应用的全流程。
第一章 Java Web 发展历史与 MVC 设计模式
一、Model I 与 Model II 开发模式
1. Model I 开发模式

核心架构:JSP + JavaBean
- JSP 页面承担视图展示 + 业务控制 + 数据处理三重职责,高度耦合
- 优点:开发简单,适合小型 Demo 项目
- 缺点:代码臃肿、维护困难、扩展性极差,无法适配大型项目
2. Model II 开发模式

核心架构:JSP + Servlet + JavaBean
- 严格分工:JSP 负责视图展示、Servlet 负责流程控制、JavaBean 负责业务逻辑
- 实现了职责分离,是 MVC 模式的雏形,为大型项目开发奠定基础
二、MVC 设计模式
MVC 是一种通用的软件设计规范,不局限于语言和框架,SpringMVC 就是 MVC 模式的最佳实践:
- M (Model) 模型层:JavaBean,分为实体类 Bean(存储数据)、业务 Bean(处理逻辑)
- V (View) 视图层:HTML/JSP 页面,负责与用户交互、数据展示
- C (Controller) 控制层:替代原生 Servlet,接收请求、调度业务、响应数据
三者协同工作,低耦合、高扩展,是现代 Web 开发的核心思想。
第二章 SpringMVC 框架搭建与基础配置(实战版)
一、项目初始化与依赖配置
1. 项目创建规范
- 必须使用 Maven 的webapp 模板创建 Web 工程
- 严格选择模板版本(推荐 1.0),避免版本冲突导致项目无法启动
2. Maven 核心依赖(pom.xml)
导入 SpringMVC 核心依赖、Servlet API、JSON 解析、视图解析器等必备依赖:
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<!-- JSON解析依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<!-- Spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SpringMVC核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Servlet/JSP API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- 日志+视图解析器 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>
</dependencies>
二、核心配置文件详解
1. web.xml 升级与配置
将默认 2.3 版本升级为3.0 版本,配置前端控制器、编码过滤器、请求映射:
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- 编码过滤器:解决中文乱码 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 放行静态HTML页面 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<!-- SpringMVC核心前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</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>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 默认首页 -->
<welcome-file-list>
<welcome-file>/index.html</welcome-file>
</welcome-file-list>
</web-app>
2. springmvc.xml 核心配置
配置包扫描、视图解析器、注解驱动,是 SpringMVC 的核心配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 包扫描:自动注册Bean -->
<context:component-scan base-package="com.qcby"></context:component-scan>
<!-- 视图解析器配置 -->
<bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="order" value="1"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateEngine" ref="templateEngine"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/html/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML5"/>
</bean>
<!-- JSON视图支持 -->
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"></bean>
<!-- 开启SpringMVC注解驱动 -->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
三、基础请求处理与视图解析
1. 实体类定义(Hello.java)
用于前后端数据交互的实体对象:
package com.qcby.model;
public class Hello {
private String username;
private String password;
private String sex;
private String age;
private String address;
private String phone;
// getter/setter 自行生成
}
2. Controller 层开发
package com.qcby.controller;
import com.qcby.model.Hello;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/hello")
public class HelloController {
// 页面跳转:返回视图名称
@RequestMapping("/hello")
public String hello(){
return "hello";
}
// 返回JSON字符串
@RequestMapping("/hello2")
@ResponseBody
public String hello2(){
return "hello2";
}
// 单参数接收
@GetMapping("/save")
@ResponseBody
public String save(String username){
System.out.println(username);
return "保存成功";
}
// 多参数接收
@GetMapping("/save2")
@ResponseBody
public String save2(String username,String password){
System.out.println(username + " " + password);
return "success";
}
// 对象参数接收
@GetMapping("/save3")
@ResponseBody
public Hello save3(Hello hello){
return hello;
}
// Restful风格:单路径参数
@GetMapping(value = "/save4/{name}")
@ResponseBody
public String save4(@PathVariable String name){
System.out.println(name);
return "success";
}
// Restful风格:多路径参数
@GetMapping(value = "/save5/{name}/{password}")
@ResponseBody
public String save5(@PathVariable String name,@PathVariable String password){
System.out.println(name + " " + password);
return "success";
}
// Post请求:接收JSON对象
@PostMapping(value = "/save6")
@ResponseBody
public Hello save6(@RequestBody Hello hello){
return hello;
}
// 兼容原生Servlet API
@GetMapping(value = "/save7")
@ResponseBody
public String save7(HttpServletRequest request, HttpServletResponse response){
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println(name + " " + password);
return "success";
}
}
3. 页面编写
-
index.html(首页)
入门程序 入门
入门程序 -
suc.html(成功页面)
成功 Hello
第三章 前后端数据交互方式详解
SpringMVC 提供了多样化的参数接收方式,完美适配各种开发场景:
一、基础参数接收
- 单 / 多参数接收:直接在方法参数中声明变量,框架自动映射请求参数
- 对象参数接收:参数过多时,使用实体类接收,自动封装属性,推荐使用
二、Restful 风格接口开发
- 核心注解:
@PathVariable - 配合路径占位符
/{参数名}使用,是现代接口开发的标准风格 - 适合少量参数的路径传参,简洁优雅
三、POST 请求与 JSON 交互
@PostMapping:专用处理 POST 请求@RequestBody:接收前端传递的 JSON 格式数据,自动封装为对象- 前端推荐在
raw格式中传输 JSON 数据
四、兼容原生 Servlet
SpringMVC 完全支持HttpServletRequest/HttpServletResponse原生 API,方便老项目迁移
第四章 SpringMVC 核心执行原理
一、核心组件


- DispatcherServlet:前端控制器,统一接收请求、分发响应
- HandlerMapping:处理器映射器,根据请求路径找到对应 Controller 方法
- HandlerAdapter:处理器适配器,执行 Controller 方法
- ViewResolver:视图解析器,解析视图名称,渲染页面
二、执行流程
- 服务器启动,加载配置文件,初始化 DispatcherServlet
- 浏览器发送请求,到达前端控制器
- 映射器找到对应处理方法,适配器执行方法
- 返回视图 / 数据,视图解析器渲染页面,最终响应给用户
总结
本文完整覆盖了SpringMVC 从理论到实战的全流程:
- 梳理 Java Web 发展历程,理解 MVC 设计思想
- 手把手搭建 SpringMVC 项目,详解核心配置
- 实战 Controller 开发,掌握所有前后端交互方式
- 解析底层执行原理,知其然更知其所以然