跳到正文
Elaine Blog
返回

Tomcat 容器、连接器与请求链路

网络与 I/O

Tomcat 同时扮演网络服务器和 Servlet 容器。Connector 负责把网络字节变成请求,容器层级负责找到 Web 应用与 Servlet,Pipeline/Valve 和 Filter 则在调用前后提供扩展点。

Table of contents

Open Table of contents

运行真正的 Tomcat 请求

下载嵌入式 Tomcat 样例下载

mvn -Dtest=NetworkServerLabTest#servesOneRequestThroughEmbeddedTomcat test

测试绑定随机端口,注册 /hello Servlet,用 JDK HttpClient 发起请求,最后停止并销毁容器。它验证的是完整网络与容器链路,不是直接调用 Servlet 方法。

Connector 把网络交给容器

**Connector(连接器)**监听端口、接受连接、解析 HTTP,并把底层请求适配为 Servlet 请求。协议处理器、端点、线程池和 Socket 缓冲都属于这一侧。 连接建立数、保持连接数和正在执行请求数不是同一个指标。

当请求解析完成,Connector 把请求交给关联的 Service 和 Engine。反向代理部署还要正确处理可信代理、原始协议和客户端地址,不能盲目信任任意 X-Forwarded-* 请求头。

四层容器怎样定位 Servlet

容器表示什么
Engine一个请求处理引擎
Host一个虚拟主机,例如域名
Context一个 Web 应用及其上下文路径
Wrapper一个具体 Servlet

请求先按主机和路径映射到 Context,再按 Servlet 映射规则找到 Wrapper。Valve 是 Tomcat 容器 Pipeline 的扩展点;Filter 属于 Servlet 规范,作用在应用内部。 认证、访问日志和业务过滤要放在职责正确的层级。

Servlet 生命周期与并发

容器通常创建一个 Servlet 实例并并发调用其 service 方法。不要把单次请求数据保存在 Servlet 实例字段中;请求状态应该放在局部变量或明确的并发安全组件里。

启动时完成映射和初始化,关闭时停止接流量、等待在途请求、销毁应用资源。后台线程、ThreadLocal、JDBC 驱动和定时任务若未释放,会阻止 WebApp 类加载器回收。

示例使用 Tomcat 11.0.25。Tomcat 官方的版本对应表显示 11.0.x 实现 Servlet 6.1,要求 Java 17 或更高; 旧项目从 javax.* 迁移到 jakarta.* 时必须评估 API 与依赖兼容。

下一步

阅读Tomcat 线程模型与性能调优,把连接、线程、队列和下游容量放进同一个模型。


分享这篇文章:

上一篇
手写轻量 RPC 框架:从调用假象到失败语义
下一篇
Tomcat 线程模型与性能调优:从容量模型开始