How Tomcat Works 5:容器

容器是一个处理用户servlet 请求并返回响应给web 用户的模块。

org.apache.catalina.Container 接口定义了容器的形式,主要有四种:

  1. Engine (引擎):表示整个catalina 的servlet 引擎
  2. Host (主机):表示一个拥有数个上下文的虚拟主机
  3. Context (上下文):表示一个Web应用,一个context 包含一个或多个wrapper
  4. Wrapper (包装器):表示一个独立的servlet

连接器如何使用容器

HttpConnector connector = new HttpConnector();
SimpleContainer container = new SimpleContainer();
connector.setContainer(container);

连接器设置完容器后,就可以调用容器的invoke 方法。

一个容器可以有一个或多个低层次上的子容器。例如,一个Context 有一个或多个wrapper,而wrapper 作为容器的最底层,不能包含子容器。

更有意思的是,Container 接口被设计成 Tomcat 管理员可以通过server.xml 文件配置来决定其工作方式的模式。

主要通过流水线pipeline 和 一系列阀门valve 来实现

pipelining tasks 流水线任务

跟过滤器一样,一个阀门可以操作传递给它的request 和 response 方法。让一个阀门完成了处理,则进一步 处理流水线中的下一个阀门,基本阀门总是在最后才被调用。

前面说到连接器是调用容器的invoke 方法,那Container 接口的 invoke 方法实现是:

public void invoke (Request request,Response response){
        pipeline.invoker(request,response);
}

流水线是通过valveContext 来保证添加给流水线的阀门全部调用。valveContext 中最重要的方法是invokeNext

The Pipeline Interface 流水线接口

流水线pipeline 中的第一个接口就是我们上面提到的invoke 方法,这个方法会唤醒流水线的阀门。此外,流水线接口允许你添加一个新的阀门或者删除一个阀门。

The valve interface 阀门接口

阀门组件负责处理请求,主要有两个方法,invoke 和 getInfo 方法。

getInfo 方法返回阀门信息。

The valveContext Interface 阀门上下文接口

阀门上下文接口有两个接口,一个是invokeNext ,在就是getInfo 方法会返回阀门上下文信息。

The Contained Interface Contained 接口

The Wrapper Interface Wrapper 接口

包装器接口。一个包装器是表示一个独立servlet 定义的容器。包装器接口继承了 Container 接口,并且添加了几个方法。

The Context Interface 上下文 接口

一个context在容器中表示一个web应用,一个context 通常含有一个或多个包装器作为子容器。

主要方法是 addWrapper ,createWrapper 等方法。

猜你喜欢

转载自blog.csdn.net/u014209205/article/details/85065812