架构设计

Spring Boot 请求生命周期:从 Tomcat 到 Controller 的完整链路

一次 HTTP 请求经过哪些过滤器、DispatcherServlet、HandlerMapping?用时序与流程图梳理,方便排查「谁改写了响应」类问题。

2026-06-04T09:12:57.454Z

Spring Boot 请求生命周期:从 Tomcat 到 Controller 的完整链路

Spring Boot 请求生命周期:从 Tomcat 到 Controller 的完整链路

从端口监听开始

server.port=8080 背后,嵌入式 Tomcat 在 NIO 线程上 accept 连接。Spring Boot 3.x 默认 Tomcat 10(Jakarta EE 命名空间 jakarta.*)。

请求进入后,不会直达你的 @RestController,而是先穿过 Filter 链。

Spring Boot HTTP 请求处理流程图

关键组件

  1. Filter:Servlet 规范层,Spring Security、CORS、Tracing 常在此。
  2. DispatcherServlet:Spring MVC 前端控制器,找 Handler。
  3. HandlerMapping:URL → Controller 方法。
  4. HandlerAdapter:执行方法、解析参数(@RequestBody@PathVariable)。
  5. HttpMessageConverter:JSON ↔ Java 对象。
  6. ControllerAdvice:全局异常 → 统一 JSON。

过滤器链与安全

Spring Security 本质是 一组 Ordered Filter。典型顺序概念:

Spring Security 过滤器链顺序示意

排查 401/403 时,先确认:哪一层 Filter 拒绝(日志 + security.debug=true 仅 dev)。

与响应相关的坑

现象 可能环节
JSON 少字段 Jackson 配置 / DTO 注解
双斜杠 404 server.servlet.context-path
CORS 预检失败 CorsFilter 顺序或 Security 未 permit OPTIONS
事务未提交 Service 未被代理(同类自调用)

异步与 WebFlux(了解边界)

Servlet 栈(Spring MVC)用线程池 一请求一线程;WebFlux 用事件循环,适合 IO 密集但迁移成本高。多数 CRUD 业务 MVC + 合理线程池 足够。

小结

记住链路:Tomcat → Filter → DispatcherServlet → Controller → Service → DB → 原路返回。出问题时按层二分,比「全局 grep」快得多。


参考:Spring Framework Servlet 文档 · 作者排查笔记。

标签