当前位置: 首页 > news >正文

Servlet 到 Spring MVC 架构演进:Java Web 开发二十年技术变迁史

目录

一、前言

二、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 真正进入了高效开发时代。
http://www.rkmt.cn/news/1459279.html

相关文章:

  • Telegram 机器人安全审计
  • 自然语言修图:混元图像3.0如何实现一句话修图
  • 随时随地管设备!聚英云免费APP+电脑端,多端数据无缝同步
  • STM32F407用ADC实时采样信号,通过UART直驱串口屏动态画波形
  • 100个免配置HTML模板:电商/教育/企业站源码,双击即看效果
  • 2026年泉州装修设计公司优选指南:从别墅私宅到酒店办公,谁能真正实现“效果图落地”? - 资讯快报
  • Android 11.0 webview 加载https白屏,忽略Https证书校验不当弹窗提醒功能实现
  • 从Java字节码到十六进制:手把手教你破解一个密码管理器的试用限制
  • 想考PMP不知道怎么选机构?PMP主流培训机构通过率实力与购买性价比分析 - 资讯焦点
  • 2026最新肇庆市本地黄金铂金白银彩金回收服务 五大黄金靠谱回收门店汇总,正规渠道对比推荐及联系方式 - 前途无量YY
  • 避坑指南:ABB机器人PC SDK开发中,网络扫描与连接的那些‘坑’(C#/.NET实战)
  • 用VBScript和批处理文件模拟恶意网页攻击:一个信息安全新手的实验笔记(附完整代码)
  • 购物卡回收高价技巧,天猫卡轻松变现! - 团团收购物卡回收
  • Gemini为何不开源?解析大模型闭源背后的商业与工程逻辑
  • 保姆级教程:用sendmsg/recvmsg在Linux多进程间传递文件描述符(附完整C代码)
  • Python之ya-direct-api包语法、参数和实际应用案例
  • Chrome扩展集成Gemma-2B:WebGPU+WASM本地AI实践
  • 免费AIGC降重工具指南:轻松降低AI查重率 学生党必备 - 仙仙学姐测评
  • 实战演练:在快马平台部署一个集成libopus的WebRTC语音聊天室
  • 长春靠谱的专业不锈钢零售制造商,究竟哪家才是你的理想之选? - GrowthUME
  • 让 PyMOL 听懂人话:Agent 自动安装 PyMolAI,并接入免费的 NVIDIA NIM + Kimi K2.6
  • 威海市黄金回收哪家门店正规?2026年口碑靠谱门店盘点+避坑实测(含金首饰+铂金+千足金+金条回收) - 亦辰小黄鸭
  • 2026 年 6 月江门防水维修机构甄选指南:卫生间免砸砖、屋顶阳台外墙地下室漏水检修与避坑全攻略 - 吉修匠
  • 2026年6月全国高压清洗设备厂家推荐:青岛龙恩达斩获工业清洁装备行业技术创新大奖,自研高压柱塞泵与成套清洗设备领跑海内外市场 - 十大排行榜推荐
  • 遂宁市黄金回收哪家门店正规?2026年口碑靠谱门店盘点+避坑实测(含金首饰+铂金+千足金+金条回收) - 亦辰小黄鸭
  • 如何快速掌握react-markdown:面向新手的完整Markdown渲染指南
  • 2026大学生准备毕业了,只会C语言会找不到工作吗?
  • 台州市黄金回收哪家门店正规?2026年口碑靠谱门店盘点+避坑实测(含金首饰+铂金+千足金+金条回收) - 亦辰小黄鸭
  • 无锡包包回收TOP5测评|30年老店vs新锐,报价差多少 - 奢侈品回收评测
  • 渭南市黄金回收哪家门店正规?2026年口碑靠谱门店盘点+避坑实测(含金首饰+铂金+千足金+金条回收) - 亦辰小黄鸭