Appearance
学习本课程需要的知识:
- Spring
- HTML
- CSS(少量)
- JavaScript(少量)
- MyBatis(最后的整合)
SpringMVC教程 - 1 SpringMVC简介
1.1 早期的Java Web项目
在早期的 Java Web 应用中,我们主要使用 Servlet 的方式开发。
我们需要编写 Servlet 来处理请求:
java
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
// 设置响应内容类型
resp.setContentType("text/html;charset=UTF-8");
// 获取输出流
PrintWriter out = resp.getWriter();
// 输出简单 HTML
out.println("<html><body>");
out.println("<h1>Hello World</h1>");
out.println("</body></html>");
}
}所有的请求处理逻辑和响应内容(HTML)都写在 doGet 或 doPost 方法里。这导致 HTML 和业务逻辑混在一起,代码职责不清晰,难以维护。前端和后端也不能分工开发。
为了解决 Servlet 中 HTML 与业务逻辑混在一起的问题,Java 引入了 JSP(JavaServer Pages):
jsp
<html>
<body>
<h1>Hello, <%= request.getParameter("name") %>!</h1>
</body>
</html>通过 JSP 把 HTML 放在页面中,用标签或少量 Java 代码来处理动态内容。
但是 JSP 仍然有问题,因为 JSP 中仍可以写 Java 代码(Scriptlet),容易导致逻辑与表现混杂,代码难以维护、难以测试;对复杂应用而言,Servlet + JSP 架构依然不够清晰。
随着项目复杂度增加,出现了基于 MVC 模式 的 Web 框架,如 Spring MVC。
1.2 MVC设计模式
MVC 设计模式是一种经典的软件架构模式,包含三个部分:
- Model(模型):处理具体的业务逻辑与数据;
- View(视图):负责展示数据;
- Controller(控制器):接收用户请求、协调 Model 和 View。
MVC 的处理流程如下:

MVC 模式帮助我们实现代码分层, 职责分离,让代码更清晰、更容易维护。
1.3 什么是SpringMVC
SpringMVC(Spring Model-View-Controller)就是对 MVC 模式的一种实现,是一个用于构建基于 MVC 模式 的 Web 应用程序。也是目前最主流的 Java Web 框架之一,几乎所有的 Java 互联网公司都在使用它。
说白了,SpringMVC 就是帮助我们开发 Web 项目(也就是网页项目)的后端部分的。
它的主要作用是:
- 接收前端发送的请求(比如点击按钮、提交表单、调用接口);
- 处理业务逻辑(比如查询数据库、计算用于页面显示的结果等);
- 返回结果给前端(可以是网页、JSON 数据等)。
如果用一句话描述 SpringMVC 的核心机制就是:DispatcherServlet 前端控制器统一接收请求,分发给对应 Controller,再由 ViewResolver 渲染视图或返回数据。(后面会讲)
1.3 Spring完成的工作
SpringMVC 主要帮我们做了大量底层繁琐工作,让我们可以专注于业务逻辑,例如:
这里可以跳过,因为现在可能暂时感受不到,学完再回来看也可以。
请求接收与分发
- 传统方式:每个请求都需要写 Servlet,通过
web.xml映射 URL;如果有很多请求,需要写大量 Servlet。 - Spring MVC:通过 DispatcherServlet 统一接收请求,并根据 URL 自动分发到对应的 Controller 方法,不需要手动管理 Servlet,URL 与方法自动映射。
- 传统方式:每个请求都需要写 Servlet,通过
参数解析与绑定
传统方式:手动从
HttpServletRequest获取参数,如req.getParameter("name"),然后还要自己做类型转换。Spring MVC:自动将请求参数绑定到方法参数或 Java 对象,例如:
java@GetMapping("/user") public User getUser(@RequestParam int id) { ... }框架会自动把请求的
id参数转换成 int 类型并传入方法,减少重复代码,避免类型转换错误。
请求与业务逻辑分离
- 传统 Servlet:业务逻辑往往写在 Servlet 中,职责混乱。
- Spring MVC:Controller 只负责请求调度,业务逻辑可以独立写在 Service 层,Model 层负责数据处理。这样代码职责清晰,可维护性高。
视图解析与返回
- 传统方式:手动写转发或重定向代码,例如
request.getRequestDispatcher("/page.jsp").forward(...)。 - Spring MVC:对传统 HTML 页面,返回视图名,由 ViewResolver 自动找到对应页面;对 REST 接口,返回对象即可自动序列化为 JSON。减少手动视图处理,前后端分离更简单。
- 传统方式:手动写转发或重定向代码,例如
统一异常处理
- Spring MVC 提供
@ExceptionHandler、@ControllerAdvice等机制,统一捕获 Controller 异常并处理。不用每个 Controller 都写 try-catch,统一处理异常和返回格式。
- Spring MVC 提供
拦截器与过滤器
- Spring MVC 提供
HandlerInterceptor可以在请求进入 Controller 前、后、完成时执行统一逻辑,例如权限检查、日志记录、性能统计。无需在每个方法中手动插入相同逻辑,增强模块化。
- Spring MVC 提供
数据格式转换
- Spring MVC 内置 HttpMessageConverter,支持自动将 Java 对象转换为 JSON、XML 或表单数据。REST API 开发非常方便,前端直接拿 JSON 使用,无需手动序列化。
注解驱动的开发方式
- 通过
@Controller、@RestController、@RequestMapping等注解,Spring MVC 自动处理 URL 映射、请求方法区分、参数绑定等。减少配置复杂度,比传统web.xml + Servlet更简洁。
- 通过
简单一句话总结:
Spring MVC 帮我们把请求处理、参数解析、视图渲染、数据序列化、异常处理等重复且容易出错的工作自动化,让我们可以专注于业务逻辑。
直接开始吧!