深入剖析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