读书人

学习tomcat 初记(2)

发布时间: 2012-10-30 16:13:36 作者: rapoo

学习tomcat 小记(2)
1)Container
container用于处理对servlet的请求,并未客户端填充resposne对象。container由org.apache.catalina.Container接口表示。共有四种类型的container:engine,host,context和wrapper。

container必须实现org.apache.catalina.Container接口。然后将container实例设置到connector的setContainer方法中。这样,connector就可以调用container的invoke方法了。

首先要注意的是,在tomcat中,共有四种类型的container,分别由不同的概念层次:
?engine:表示tomcat的整个servlet引擎;
?host:表示包含有一个或多个context的虚拟机;
?context:表示一个web应用。一个context中可以有多个wrapper;
?wrapper:表示一个独立的servlet。

container中可以包含一些支持的组件,如Loader,logger,Manger,Realm和Resources等,提供了getter和setter方法进行访问。

如果对servlet的过滤器有所了解的话,就不难理解pipeline和valve是如何工作的。pipeline就像是filter链,每个valve就像是一个过滤器。实际上,valve与过滤器类似,它可以控制传递给它的request和response对象。当一个valve处理结束后,它就调用pipeline中的下一个valve进行处理。basic valve总是最后被调用的。
container中有一个pipeline。当调用了container的invoke方法后,container将处理过程交给它的pipeline,而pipeline会调用它的第一个valve,valve执行完后会调用后续的valve,知道所有的valve都调用结束。

2) Context
本节的程序展示了如何使用context和wrapper。在程序中是了一个mapper(一个组件)来帮助context选择某个wrapper来处理特殊的请求。

container中可以包含有多个mapper来支持不同的请求协议。例如,一个mapper处理HTTP协议请求,另一个mapper处理HTTPS协议的请求。org.apache.catalina.Mapper接口定义如下所示:
package org.apache.catalina;
public interface Mapper {
public Container getContainer();
public void setContainer(Container container);
public String getProtocol();
public void setProtocol(String protocol);
public Container map(Request request, boolean update);
}
其中setProtocol和getProtocol指明了该mapper负责处理哪种协议,map方法返回使用哪个子container处理特殊的请求。

读书人网 >编程

热点推荐