java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot处理HTTP请求

Spring Boot内嵌Tomcat处理HTTP请求的完整过程

作者:invicinble

Spring Boot和Tomcat的结合可以让我们能够快速、方便地开发、部署和运行Java Web应用,这篇文章主要介绍了Spring Boot内嵌Tomcat处理HTTP请求的完整过程,文中通过代码介绍的非常详细,需要的朋友可以参考下

我们来完整、准确地梳理一遍 Spring Boot 内嵌 Tomcat 处理 HTTP 请求的全过程,并澄清 I/O 模型的问题。

完整流程(从客户端到响应返回)

假设你用 java -jar myapp.jar 启动了一个 Spring Boot 应用(内嵌 Tomcat),浏览器发起请求:

客户端 → 服务器:建立 TCP 连接

客户端发送 HTTP 请求数据

Tomcat 接收并解析 HTTP 请求

关键点:Tomcat 是 Servlet 容器,负责底层网络通信和 HTTP 协议解析

🔧 I/O 模型问题(BIO / NIO)

  • 传统 Tomcat(老版本默认):BIO(Blocking I/O)→ 每个请求一个线程,性能差
  • 现代 Spring Boot 内嵌 Tomcat(默认)NIO(Non-blocking I/O) → 少量线程处理大量连接(基于 Java NIO 的 Selector 机制)
  • Tomcat 10+ 还支持 NIO2(AIO)和 APR(本地库)

所以你说的“bno”很可能是 “BIO” 的误打,而实际情况是:现代 Spring Boot 默认用的是 NIO!

请求交给 Spring MVC 处理

构建 HTTP 响应

Tomcat 发送响应 + 断开连接

关键澄清

你提到的说法实际情况
“Tomcat 解析 HTTP 请求”正确,这是 Tomcat 的核心职责
“其实是 bno”❌ 应为 NIO(非阻塞 I/O),不是 BIO(阻塞 I/O)
Spring Boot 默认 I/O 模型NIO(通过内嵌 Tomcat 的 NioEndpoint 实现)

💡 你可以通过日志确认:
Spring Boot 启动时会打印:
Tomcat initialized with port(s): 8080 (http)
并且底层使用的是 org.apache.tomcat.util.net.NioEndpoint

总结全流程(简化版)

客户端
  │
  ▼
TCP 三次握手(建立连接)
  │
  ▼
发送 HTTP 请求字节流
  │
  ▼
Tomcat (NIO) 接收 → 解析为 HttpServletRequest
  │
  ▼
Spring MVC DispatcherServlet 分发请求
  │
  ▼
执行 @Controller 业务逻辑
  │
  ▼
返回结果 → 序列化为 JSON
  │
  ▼
Tomcat 写入 HttpServletResponse → 发送 HTTP 响应
  │
  ▼
根据 Connection 头决定:
   ├─ keep-alive → 保持 TCP 连接(长连接)
   └─ close     → TCP 四次挥手断开(短连接)

如果你对 NIO 的工作原理(Selector、Channel、Buffer)或者 Spring Boot 如何配置 Tomcat 的连接参数(如最大连接数、超时时间)感兴趣,也可以继续深入!

总结

到此这篇关于Spring Boot内嵌Tomcat处理HTTP请求的文章就介绍到这了,更多相关SpringBoot处理HTTP请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文