Servlet 到 Spring MVC 架构演进:Java Web 开发二十年技术变迁史
2026/6/4 9:06:39 网站建设 项目流程

目录

一、前言

二、Servlet 时代:Java Web 的起点

Servlet 工作流程

Servlet 的问题

三、JSP 的出现

四、Servlet + JSP 的经典模式

五、MVC 思想诞生

MVC 架构图

MVC职责划分

Model

View

Controller

六、Struts 时代

七、Spring MVC 的诞生

八、Spring MVC 核心架构

Spring MVC 架构图

九、DispatcherServlet 是什么?

十、Spring MVC 请求执行流程

十一、注解时代到来

十二、Spring MVC 自动完成了什么?

参数解析

JSON转换

异常处理

数据校验

十三、Spring Boot 进一步简化

十四、从 Servlet 到 Spring MVC 的本质变化

十五、为什么 Spring MVC 能成为主流

十六、总结


一、前言

对于刚接触 Spring Boot 的开发者来说,经常会有一个疑问:

为什么访问一个接口: GET /user/list

只需要写:

@RestController @RequestMapping("/user") public class UserController { @GetMapping("/list") public List<User> list() { return userService.list(); } }

Spring 就能够自动接收请求、解析参数、返回 JSON?

这些能力究竟是谁实现的?

事实上:

Spring MVC

并不是凭空出现的。

它是 Java Web 技术二十多年演进的结果。

整个发展历程大致如下:

Servlet ↓ JSP ↓ Servlet + JSP ↓ MVC ↓ Struts ↓ Spring MVC ↓ Spring Boot

今天我们就来看看:

Java Web 是如何从几十行 Servlet 演变成一个 @GetMapping 的。


二、Servlet 时代:Java Web 的起点

1997年。

Sun 公司推出:

Servlet

用于处理 HTTP 请求。

当时一个最简单的 Web 程序:

@WebServlet("/hello") public class HelloServlet extends HttpServlet { @Override protected void doGet( HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter() .write("Hello Servlet"); } }

浏览器访问:

http://localhost:8080/hello

返回:

Hello Servlet

Servlet 工作流程

流程非常简单:

浏览器发送请求 ↓ Tomcat接收请求 ↓ 调用Servlet ↓ 返回响应

Servlet 的问题

随着业务变复杂:

@WebServlet("/user") public class UserServlet extends HttpServlet { protected void doGet(...) { //查询数据库 //组装HTML //输出页面 } }

一个类里面:

SQL 业务逻辑 HTML页面 请求处理

全部混在一起。

最终导致:

代码难维护 耦合严重 开发效率低

三、JSP 的出现

为了解决页面开发问题。

Sun 推出了:

JSP

即:

Java Server Pages

示例:

<html> <body> <h1>Hello JSP</h1> <% out.println("当前时间"); %> </body> </html>

此时:

页面交给JSP 逻辑交给Servlet

架构变成:


四、Servlet + JSP 的经典模式

2000年前后。

大量企业项目采用:

Servlet + JSP

模式。

例如:

UserService service = new UserService(); List<User> users = service.list(); request.setAttribute( "users", users ); request.getRequestDispatcher( "/user.jsp" ).forward( request, response );

然后:

<c:forEach items="${users}" var="user"> ${user.name} </c:forEach>

这种方式比纯 Servlet 已经好很多。

但是问题依旧存在。


五、MVC 思想诞生

开发者发现:

一个系统其实包含三部分:

数据 界面 业务

于是提出:

MVC

即:

Model View Controller

MVC 架构图


MVC职责划分

Model

负责:

业务逻辑 数据库访问 数据处理

例如:

UserService UserMapper

View

负责:

页面展示

例如:

JSP HTML

Controller

负责:

接收请求 调用业务 返回结果

例如:

UserController

六、Struts 时代

MVC 思想成熟后。

Apache 推出了:

Struts

这是 Java Web 第一个真正意义上的 MVC 框架。

配置:

<action path="/login" type="LoginAction"/>

对应:

public class LoginAction extends Action { public ActionForward execute(...) { return mapping.findForward( "success" ); } }

优点:

统一请求入口 MVC规范

缺点:

配置繁琐 XML过多 扩展困难

七、Spring MVC 的诞生

2004年。

Spring Framework 诞生。

随后:

Spring MVC

出现。

其目标:

简化MVC开发

核心思想:

约定优于配置

八、Spring MVC 核心架构

Spring MVC 最大特点:

前端控制器模式

所有请求统一进入:

DispatcherServlet

Spring MVC 架构图


九、DispatcherServlet 是什么?

它是:

Spring MVC核心

所有请求:

/user/list /order/create /product/query

都会先进入:

DispatcherServlet

然后再分发。

因此:

DispatcherServlet = 总调度中心

十、Spring MVC 请求执行流程

用户访问:

GET /user/list

执行过程:

sequenceDiagram Browser->>DispatcherServlet: 请求 DispatcherServlet->>HandlerMapping: 查找Controller HandlerMapping-->>DispatcherServlet: 返回方法 DispatcherServlet->>Controller: 执行方法 Controller-->>DispatcherServlet: 返回数据 DispatcherServlet-->>Browser: 响应结果

十一、注解时代到来

Spring MVC 最大创新之一:

注解开发

以前:

<action path="/user"/>

现在:

@Controller @RequestMapping("/user") public class UserController { }

接口:

@GetMapping("/list") public List<User> list() { return userService.list(); }

简单直观。


十二、Spring MVC 自动完成了什么?

当请求到来:

/user/list?id=1

Spring MVC 自动完成:

参数解析

public User get(Long id)

自动接收:

id=1

JSON转换

返回:

User

自动变:

{ "id":1, "name":"Tom" }

异常处理

@ControllerAdvice

统一异常。


数据校验

@Valid

自动校验参数。


十三、Spring Boot 进一步简化

Spring MVC 虽然强大。

但配置仍然不少:

DispatcherServlet ViewResolver ComponentScan

都需要配置。


Spring Boot 出现后:

@SpringBootApplication public class Application { public static void main( String[] args) { SpringApplication.run( Application.class, args ); } }

即可启动。


内置:

Tomcat Spring MVC Jackson 日志

全部自动配置。


十四、从 Servlet 到 Spring MVC 的本质变化

如果总结二十年的演进:

Servlet:

开发者管理所有细节

Spring MVC:

框架管理流程 开发者专注业务

对比:

功能ServletSpring MVC
URL映射手工处理注解
参数解析手写自动
JSON转换手写自动
异常处理手写自动
IoC管理支持
AOP支持支持

十五、为什么 Spring MVC 能成为主流

原因其实很简单。

它解决了企业开发最核心的问题:

降低重复代码

开发者只需要关注:

@GetMapping("/list") public List<User> list() { return userService.list(); }

剩余工作:

请求解析 参数绑定 Bean管理 JSON转换 异常处理 事务管理

全部由 Spring 完成。


十六、总结

Java Web 二十多年的发展,本质上是一部:

不断解放生产力

的历史。

演进路线:

Servlet ↓ JSP ↓ Servlet + JSP ↓ MVC ↓ Struts ↓ Spring MVC ↓ Spring Boot

从最初:

response.getWriter().write(...)

到今天:

@GetMapping("/user") public User query() { return user; }

开发者编写的代码越来越少。

框架承担的职责越来越多。

而 Spring MVC 正是这条演进路线中最重要的里程碑之一。

它不仅统一了 Java Web 开发模式,也为后来的 Spring Boot、Spring Cloud 以及微服务体系奠定了坚实基础。

可以这样理解:

Servlet 是 Java Web 的起点, Spring MVC 是 Java Web 走向现代化的转折点, 而 Spring Boot 则让 Java Web 真正进入了高效开发时代。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询