深入剖析Tomcat容器

Servlet 容器是用来处理请求 servlet 资源,并为 Web 客户端填充 response 对象的模块。servlet 容器是org.apache.catalina.Container 接口的实例。在 Tomcat 中,共有4中类型的容器:Engine、Host、Context和Wrapper。

Container接口

Tomcat 中的 servlet 容器必须要实现 org.apache.catalina.Container 接口。对于 Catalina 中的 servlet 容器,首先需要注意的是,共有4种类型的容器,分别对应不同的概念层次:

Engine:表示整个 Catalina servlet 引擎
Host:表示包含有一个或多个 Context 容器的虚拟主机
Context:表示一个 Web 应用程序。一个 Context 可以有多个 Wapper
Wrapper:表示一个独立的 Servlet

上述的每个概念层次都由 org.apache.catalina 包内的一个接口表示,这些接口分别是 Engine、Host、Context 和 Wrapper,它们都继承自 Container 接口。这4个接口的标准实现分别是 StandardEngine 类、StandardHos t类、StandardContext 类和 StandardWrapper 类,它们都在 org.apache.catalina.core 包内。

管道任务

管道包含 Servlet 容器将要调用的任务,一个阀表示一个具体的执行任务。管道就像是过滤器链,而阀就像是过滤器。阀与过滤器类似,可以处理传递给它的 request 对象和 response 对象。当一个阀执行完成后,会调用下一个阀继续执行。基础阀总会是最后一个执行的。

当调用了容器的 invoke() 方法后,容器会将处理工作交由管道完成,而管道会调用其中的第1个阀开始处理。当第1个阀处理完成后,它会调用后续的阀继续执行任务,直到管道中所有的阀都处理完成。

// invoke each value added to the pipeline
for(int n = 0; n < values.length; n++) {
    values[n].invoke( ... );
}
// then, invoke the basic value
basicValue.invoke( ... );

This chapter requires login to view full content. You are viewing a preview.

Login to View Full Content

Course Curriculum

3

框架与 I/O:Spring、Netty 与 Web 容器

理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4

高性能中间件:消息、缓存与存储

熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。
6

云原生:容器化、可观测性与工程效能

通过 Docker/K8s 实现弹性部署,集成 Metrics/Logs/Traces 构建可观测体系,推动 DevOps 与自动化,让架构在云上持续交付与进化。