当前位置: 首页 > 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.jsqmd.com/news/947766/

相关文章:

  • 【架构实战】API版本管理:让接口平滑演进
  • 学Simulink——氢燃料电池堆(PEMFC)动态响应特性分析
  • 【江门各区黄金上门回收指南:六大靠谱门店实地测评】 - 余生黄金回收
  • Grok4双轨推理架构解析:第一性原理的工程实现与工业归因能力
  • Telegram 机器人安全审计
  • 从按钮到电铃:一个真实的64D半自动闭塞故障处理与日常维护指南
  • 从零部署Intel Realsense 457:环境配置、硬件连接与Python实战
  • 小显卡跑大模型:四层显存压缩实现50%显存节省
  • Python项目文件拷贝
  • STM32F407用ADC实时采样信号,通过UART直驱串口屏动态画波形
  • 自然语言修图:混元图像3.0如何实现一句话修图
  • 随时随地管设备!聚英云免费APP+电脑端,多端数据无缝同步
  • MATLAB一键运行的多元线性回归分析包:含数据、代码与可视化图表
  • 2026证件照换背景app推荐,免费证件照换底色软件保姆级手把手教程 - AI测评专家
  • 5V安全供电!用Arduino Nano给你的SX1308升压模块做个简易电压校准器
  • 100个免配置HTML模板:电商/教育/企业站源码,双击即看效果
  • 逆向工程不只是‘看代码’:聊聊Java字节码、AES加密与那些年我们绕过的软件保护
  • CEEMDAN信号降噪Python工程包:带真实数据、逐行中文注释、Anaconda+PyCharm一键运行
  • 恩智浦智能车竞赛三轮电磁组KEA128实战工程包:含驱动库、PID控制源码与双IDE配置指南
  • 51单片机实现实时自适应温控:神经元PID算法+电炉仿真+LCD显示
  • Android 11.0 webview 加载https白屏,忽略Https证书校验不当弹窗提醒功能实现
  • 2026年泉州装修设计公司优选指南:从别墅私宅到酒店办公,谁能真正实现“效果图落地”? - 资讯快报
  • 如何在Blender中实现3D打印工作流的完整闭环?Blender 3MF插件深度解析
  • 文心大模型技术解剖:从API到Attention的工程级实操指南
  • 从Java字节码到机器码:用IDA Pro深入分析PasswordVault.class的破解思路与防护启示
  • 关于西安治泉环保与治瑔环保是两家完全独立公司的严正澄清 - 博客万
  • 全新原装AD5328ARUZ-REEL7是一款来自 Analog Devices 的八通道、12位、缓冲电压输出数模转换器(DAC)。
  • PHP跨平台桌面应用开发实践
  • 零代码打通ERP+MES+WMS,这套集成方案把我从“接口地狱”里捞了出来
  • 【HarmonyOS 6.0】Map Kit 进阶:基于 MVT 矢量图层的动态地图数据叠加方案