浅析Tomcat之Container概览

Container是容器接口.我们知道请求到达连接器,经过一些预处理,调用容器的方法.来真正地处理请求.Container也就是servlet容器是用来处理请求servlet资源,并为Web客户端填充response对象的模块.在Tomcat中有4种类型的容器.分别是Engine,Host,Context,Wrapper.

org.apache.catalina.Container这个接口有着很详细的类注释,基本上都把它的作用给说的很清楚.大意是容器是可以执行从客户端收到的请求.并根据这些请求返回响应对象,它支持管道阀门.这里说的管道是org.apache.catalina包下的Pipeline而阀门指的是Value.对于容器接口它的4个概念层次分别是:
Engine:表示Tomcat的整个Servlet引擎.
Host:表示包含一个或者多个Context容器的虚拟主机
Context:表示一个Web应用程序.
Wrapper:表示一个独立的Servlet.
这4个接口的都有一个标准的实现,对应于org.apache.catalina.core下的StandardEngine,StandardHost,StandardContext和StandardWrapper.有一点需要注意的是Container的实现类都继承自ContainerBase抽象类.它对它们进行了一些基础的实现.我们可以看看类图.

Container类图.jpg

此外ContainerBase也是继承自LifeCycle的类层次.因此它也必须实现一些生命周期方法.这些方法可以让StandardService等对其进行生命周期的管理.

public void invoke(Request request, Response response)  
    throws IOException, ServletException  
{  
    pipeline.getFirst().invoke(request, response);  
}

   上述是ContainerBase的invoke方法.也就是连接适配器转发请求所调用的方法.可以很清楚的看出这个调用是委托给pipeline里面的阀来执行的.后续将对StandardPipeline进行解读.此外容器还包含了一些组件如载入器(Loader),记录器(Logger),管理器(Manager),领域(Realm)和资源(Resources).

 

 

首发于泛泛之辈http://www.lihongkun.com/archives/143

猜你喜欢

转载自lihkstyle.iteye.com/blog/1944408