Tomcat 是什么?有什么用?(简述)

Tomcat示例
Tomcat 是一个 Java Web 服务器,也是一个 Servlet 容器。它负责接收 HTTP 请求、管理连接和线程,并把请求转交给 Web 应用处理。

例如,当用户在浏览器中访问:

http://localhost:8080/user/list

这个请求并不是直接进入 Controller,而是先被 Tomcat 接收和解析,然后再交给 Spring MVC 等 Web 框架处理。

Tomcat 的主要职责

  • 监听端口,例如 8080
  • 接收浏览器或客户端发来的 HTTP 请求。
  • 建立和管理 TCP 连接。
  • 解析 HTTP 请求内容。
  • 封装 HttpServletRequestHttpServletResponse 对象。
  • 维护线程池,分配线程处理请求。
  • 把请求转交给 Web 应用。
  • 把 Web 应用生成的响应返回给客户端。

请求执行流程

第一步:客户端建立 TCP 连接

浏览器或客户端会先和服务器建立 TCP 连接:

用户 socket  <---- TCP 连接 ---->  Tomcat socket

Tomcat 会监听指定端口,例如:

8080

所以当用户访问下面的地址时,Tomcat 就能接收到请求:

http://服务器IP:8080

第二步:监听线程接收请求

Tomcat 内部会有专门的线程监听端口,等待新的 HTTP 请求进入。

例如客户端发送:

GET /user/list HTTP/1.1
Host: localhost:8080

Tomcat 会先接收这个请求,并把它交给后续组件处理。

第三步:请求进入工作线程池

Tomcat 不会为每一个请求无限创建新线程,而是维护一个工作线程池。

请求进入后的处理方式大致如下:

监听线程接收请求
  ↓
交给工作线程池中的某个线程
  ↓
工作线程负责处理这个请求

使用线程池的好处:

  • 提高并发处理能力。
  • 避免频繁创建和销毁线程。
  • 防止请求过多时无限创建线程导致服务器资源耗尽。

第四步:封装 request 和 response

Tomcat 会把 HTTP 请求解析并封装成 Java 对象:

HttpServletRequest request;
HttpServletResponse response;

例如用户请求中带有参数:

/user?id=1001

Controller 中可以通过 request 获取参数:

request.getParameter("id");

response 则用于把处理结果写回给客户端:

response.getWriter().write("hello");

第五步:转交给 Web 应用

Tomcat 接收到请求并完成基础封装后,会把请求交给 Web 应用处理。

一个常见的 Spring Web 应用结构如下:

Controller
  ↓
Service
  ↓
DAO / Mapper

/user/list 为例,请求处理流程可以理解为:

请求 /user/list
  ↓
Tomcat 接收请求
  ↓
Tomcat 解析 HTTP 请求
  ↓
Tomcat 封装 request / response
  ↓
交给 Spring MVC
  ↓
找到对应的 Controller 方法
  ↓
执行业务逻辑并返回响应

Spring Boot 中的 Tomcat

在 Spring Boot 项目中,Tomcat 通常以内嵌服务器的形式存在。我们启动 Spring Boot 应用时,底层会自动启动 Tomcat,并由它负责监听端口和处理 HTTP 请求。

所以平时写业务代码时虽然很少直接操作 Tomcat,但每一次接口请求都会经过 Tomcat。

总结

Tomcat 可以理解为 Java Web 应用和外部 HTTP 请求之间的入口。它主要负责接收请求、分配线程、封装请求响应对象,并把请求交给真正的业务应用处理。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐