从 Servlet 到 Spring Boot : Java Web 的演进

一、第一阶段:Servlet —— Java Web 的原始形态

基本特征:
  • Servlet 是 Java 最早期用于处理 HTTP 请求的规范
  • 每一个请求通过 URL 映射到一个具体的 HttpServlet 实现类
  • 所有配置集中在 web.xml 文件中
请求处理流程:

浏览器请求 -> Web 容器读取 web.xml -> 找到映射的 Servlet -> 调用 doGet() / doPost()

优势:
  • 简单直白
  • 开发者完全掌握每个请求的开发逻辑
缺点:
  • 每个 URL 都要手动配置映射, web.xml 文件极其臃肿
  • 控制器,业务逻辑,视图耦合在一起
  • 缺乏统一调度和分层设计,不利于大型项目维护

第二阶段:Spring MVC —— DispatcherServlet 的统一调度

核心改进:
  • 引入了 前端控制器 DispatcherServlet:统一处理所有请求,再根据路径,注解或配置路由到具体方法
  • 支持注解式开发(如@Controller、@RequestMapping)和 Bean 配置文件
  • web.xml 中只需要注册一个 DispatcherServlet,极大地简化了配置
请求处理流程:

浏览器请求 -> DispatcherServlet(web.xml注册)

        -> HandlerMapping 查找处理器 

        -> HandlerAdapter 调用 Controller 方法 

        -> 视图解析器返回页面或 JSON

优势:
  • 实现了 MVC 分层:Controller、Service、Dao 职责清晰
  • 注解 + 配置结合,高效灵活
  • 内部采用策略模式:HandlerMapping、Adapter、Resolver 等可以替换扩展
缺点:
  • 虽然配置比 Servlet 少,但仍需要手动配置 DispatcherServlet
  • 部署方式依旧是 war 包,依赖外部 web容器(Tomcat)启动

第三阶段:Spring Boot —— 极简化配置 + 内嵌容器的自动化框架

核心理念:

约定优于配置,自动配置,起步依赖,内嵌服务器

  • 使用 @SpringBootApplication 启动主类,不再需要 web.xml
  • 自动注册 DispatcherServlet ,无需手动配置
  • 内嵌 Tomcat ,由 Java main 方法启动项目,彻底脱离外部服务器
  • 支持 application.yml / application.properties 配置方式,全局统一管理参数
  • 自动扫描,自动装配,自动注册
请求处理流程:

main() -> SpringApplication.run() 启动程序

        -> 创建 ApplicationContext(先于 DispatcherServlet)

        -> 自动配置类注册 DispatcherServlet 为 Bean

        -> 创建内嵌 Tomcat,并将 DispatcherServlet 动态注册进 ServletContext

        -> 请求到达时仍由 DispatcherServlet 分发给 HandlerMapping、HandlerAdapter 等处理

优势:
  • 零配置启动,无需 web.xml,无需 DispatcherServlet 注册
  • jar 包即可启动:java -jar,便于部署,Docker 打包
  • 自动化体系:基于 classpath 中的依赖自动决定配置行为
  • 快速构建微服务架构:可与 Spring Cloud 等配合,快速搭建现代架构
缺点:

        封装过深,底层行为不透明,对调试和深入理解有门槛

Spring Boot 相对于 Spring MVC 做了哪些关键改变?

1,加载流程对比
Spring MVC 加载流程 (war包 + 外部容器)
  1. Tomcat 启动
  2. 读取 web.xml
  3. 创建并初始化 DispatcherServlet
  4. DispatcherServlet 创建 WebApplicationContext
  5. 加载配置文件,扫描@Controller
  6. 初始化完成,开始处理请求

流程主导权在 Web 容器(Tomcat),Spring 被动接入

Spring Boot 加载流程 (jar包 + 内嵌容器)
  1. 执行 main() 方法
  2. 调用 SpringApplication.run() 创建完整的 ApplicationContext
  3. 自动注册 DispatcherServlet 为 Bean
  4. 自动创建内嵌 Tomcat
  5. 将 DispatcherServlet 动态注册进 ServletContext
  6. 启动完成,开始处理请求

流程主导权在 Spring Boot,Tomcat 被动集成

2,请求流程一样

浏览器请求 -> DispatcherServlet

        -> HandlerMapping

        -> HandlerAdapter

        -> Controller

        -> ViewResolver

两种方式最终处理请求的逻辑完全一致,核心区别在启动加载阶段的控制权与顺序。

3,总结:四大关键变化
维度Spring MVCSpring Boot
1. Servlet 注册方式通过 web.xml 静态注册 DispatcherServlet自动作为 Spring Bean 注册,代码动态注册到 ServletContext
2. 加载顺序DispatcherServlet ➝ 创建 Spring 容器 ➝ 加载 Bean创建完整的 Spring 容器  ➝ 注册 DispatcherServlet
3. 部署方式war 包部署到外部容器jar 包独立运行
4. 启动方式由容器启动项目(Tomcat 读取 war)执行 main 方法启动 Spring Boot,反向启动容器

Spring Boot 没有改变底层 Servlet 的本质,但它完全反转了启动主导权、自动封装了配置流程,并统一了 DispatcherServlet 的注册、Tomcat 的启动、Bean 的初始化方式。    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值