(基于tomcat 5.0.28)

A Container is an object that can execute requests received from a client, and return responses based on those requests. A Container may optionally support a pipeline of Valves that process the request in an order configured at runtime, by implementing the Pipeline interface as well.
Containers will exist at several conceptual levels within Catalina. The following examples represent common cases:
Engine - Representation of the entire Catalina servlet engine, most likely containing one or more subcontainers that are either Host or Context implementations, or other custom groups.
Host - Representation of a virtual host containing a number of Contexts.
Context - Representation of a single ServletContext, which will typically contain one or more Wrappers for the supported servlets.
Wrapper - Representation of an individual servlet definition (which may support multiple servlet instances if the servlet itself implements SingleThreadModel).
A given deployment of Catalina need not include Containers at all of the levels described above. For example, an administration application embedded within a network device (such as a router) might only contain a single Context and a few Wrappers, or even a single Wrapper if the application is relatively small. Therefore, Container implementations need to be designed so that they will operate correctly in the absence of parent Containers in a given deployment. (此处摘自Container的javadoc)

Container - 执行来自客户的request,并生起相应的response. container可以通过 pipleline 和 valvel 来实现执行时的rquest动态处理,container也可以自己实现 Pipeline接口。
Container的概念覆盖Catalina的几个其他结构层次,比如下面的几个例子:
Engine - 代表了整个 Catalina servlet engine, 一般包括几个子 container,比如 Host, Context,或其他的一些配置
Host - 代表了一个包含Context的虚拟Host,
Wrapper - 代表某个特定servlet得实现(此实现可以仅仅是一个servlet的实例,或者如果此servlet实现了SingleTreadModel,可以是多个servlet)
一个特定的Catalina部署不必包含所有上面描述的container。比如说一个特殊的内嵌在网络设备上(比如路由器)的管理应用程序,可以只包含单独的一个context和很少的几个Wrapper, 或者是干脆只有一个Wrapper。因此,在实现container时要考虑到也许他们会在没有父container的环境中运行。

Engine - 代表了整个 Catalina servlet engine。
Engine的子container一般会是Host,或者 Context.
Engine总是在Catalina 的container 中最顶的一个Container, 所以Engine的 setParent方法抛出一个IllegalArgumentException异常。

Host - 代表了一个包含Context的虚拟Host,比如localhost 或者
http://www.yourdomain.com/等等
Host的父Container一般是engine或者为空
Host的子Container一般是Context,代表一个部署在此Host上的一个特定的应用。
 在server.xml中context可能会有如下的对应
 <Host name="
http://www.yourdomain.com/" debug="0" unpackWARs="true" autoDeploy="true" xmlValidation="false" >
       ......
 </Host>
      
Context- Context 也是一个Container,它代表了Host 下的一个特定的应用(web application),context的父Container通常是Host,子Container通常是Wrapper. 在server.xml中context可能会有如下的对应
 <Context path="/ctxpath" docBase="d:\docbase" workDir="d:\workdir" />

Wrapper - Wrapper 代表某个特定servlet得实现,它也是一个Container. Wrapper 负责装载,初始化,销毁其所对应的 servlet。 它的父Container通常是Context. web.xml中的servlet定义对应相应的wrapper. Wrapper 没有子container.

Connector-负责接受来自客户端的request,并返回response到客户端。比如coyote 是一个http connector,它复杂接受http请求,
也可以有一个ftp connector, 负责处理ftp请求。

Service 是一组共享同一个container(比如engine)的connector.比如一个service中可以有处理ssl-http请求和non-ssl-http的Connctor,它们共享同一个Container


valve - 是属于特定Container的专门处理request的组件。一个特定container中会有多个valve,他们在container的pipeline中。在处理request时被依次调用。

pipeline,属于特定container的, valve的集合。 在处理request时,pipeline中的request会被依次调用。每个container一般都有特定的一个valve生成最终返回给用户的response(其他的valve也许只是对request或response作一些检查或设置),这个valve在pipeline中最后被执行。因此,在pipeline的实现中,有一个setBasic()方法,就是设置这个特定的valve 的。与 engine对应的这个basic valve 是StandardEngineValue, Host对应的是 StandardHostPipeLine. 大多数情况下,每个Container只有一个basic valve.

以上的几个概念一般在server.xml和web.xml中都有对应。

一般来讲,一个简单的catalina实现就是最顶层一个server, 之后是一个service,其中包括两个结构上并列的的组件,connctor,和engine.(connector 接受请求,engine处理请求). engine 下面是Host,   Host 下面是 Context, Context下面是Wrapper,最下面是 servlet.