浅析Tomcat之Container

  • 来源:
  • 更新日期:2018-05-15

摘要:Container是容器接口.我们知道请求到达连接器,经过一些预处理,调用容器的方法.来真正地处理请求.Container也就是servlet容器是用来处理请求servlet资源,并为Web客户端填充response对象的模块.在Tomcat中有4种类型的容器.分别是Engine,Host,Context,Wrapper. org.apache.catalina.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抽象类. 此外ContainerBase也是继承自LifeCycle的类层次.因此它也必须实现一些生命周期方法.这些方法可以让StandardService等对其进行生命周期的管理.

002UASMrzy7605pjKJv15&690.jpg

public void invoke(Request request, Response response) throws IOException, ServletException { pipeline.getFirst().invoke(request, response); } 上述是ContainerBase的invoke方法.也就是连接适配器转发请求所调用的方法.可以很清楚的看出这个调用是委托给pipeline里面的阀来执行的.后续将对StandardPipeline进行解读.此外容器还包含了一些组件如日志组件(Logger),管理器(Manager),领域(Realm)和资源(Resources).