一、servlet 容器用来处理请求servlet资源、为客户端封装Response 对象的模块web
二、tomcat 容器分四种:apache
- Engine:整个Catalina servlet 引擎
- Host:包含一个或多个Context 容器的虚拟主机
- Context:表示一个web应用程序
- Wrapper:表示一个独立的servlet
三、Container 接口tomcat
- Engine接口,标准实现类 StandardEngine
- Host接口,标准实现类 StandardHost
- Context接口,标准实现类 StandardContext
- Wrapper接口,标准实现类 StandardWrapper
- 四个借口都继承至Container 接口
- 实现类都继承至ContainerBase 抽象类
- 在org.apache.catalina.core包里面
四、一个容器能够有0个或多个低级子容器app
- Engine > Host >Context > Wrapper
- 包含关系 不能够倒置
五、容器能够包含支持的组件:server
- 载入器、记录器、管理器、领域、资源等
- loader、logger、manager、realm、Resource
六、部署应用时,tomcat 管理员能够经过编辑配置文件(server.xml)来决定使用哪一种容器xml
- 这是经过引入容器中的管道(pipeline)和阀(value)的集合来实现的
七、管道任务对象
- Pipeline接口
- Value 接口
- ValueContext 接口
- Contained 接口
- 在org.apache.catalina包里面
八、管道包含该servlet 容器将要调用的任务继承
- 一个阀表示一个要具体执行的任务
- servlet 容器的管道中,有一个基础阀
- 能够添加任意数量的阀(数量不包括基础阀)
- 能够编辑tomcat 配置文件动态添加阀

- 管道就像过滤器链同样传递Request对象和response对象
- 阀相似过滤器(是Value 接口的实例)
- 基础阀最后一个执行
- 一个servlet 容器有一条管道
- 当调用容器的invoke 方法时,容器会将处理工做交由管道完成
- 管道调用第一个阀开始处理
- 管道处理伪代码:

九、管道必须保证添加到其中的全部阀和基础阀都被调用一次接口
- 经过建立ValueContext 接口实例实现的
- ValueContext是管道的内部类实现,因此ValueContext 接口能够访问到管道全部成员
- ValueContext 最重要方法

- 建立ValueContext 实例后,实例会调用 invokeNext 方法
- 先调用第一个阀,执行完后调用后面的阀
- ValueContext 实例将自身传递给阀,每一个阀都能调用ValueContext 实例的invokeNext 方法
- 一个实现了ValueContext 接口的内部类 StandardPipelineValueContext
十、Contained 接口ip
- 阀能够选择是否实现该接口
- 接口实现类可使用接口中的方法,至多与一个servlet 容器相关联

十一、Wrapper 级的servlet 容器
- 表示一个独立级的servlet 定义
- Wrapper 接口实现类负责管理其基础servlet 类的servlet 周期
- 调用servlet 的init、service、destory方法
- 最低级servlet 容器,不能添加子容器
- 重要方法load 、allocate
- load 方法载入并初始化servlet 类
十二、Wrapper 应用程序
核心类 SimpleWrapper
- 包含一个Pipeline 实例
- Pipeline 实例包含一个基础阀(SimpleWrapperValue)和两个额外阀
- 两个额外阀:ClientIPLoggerValue、HeaderLoggerValue
- 使用一个Loader 实例载入servlet 类
- Wrapper 实例的基础阀调用servlet 实例的 service() 方法
1三、Context 应用程序
- 当应用程序中有多个Wrapper 实例时,须要使用映射器
- 映射器是组件,帮助servlet 容器,选择一个子容器来处理servlet 请求
- 映射器仅仅存在于tomcat4中,tomcat5使用了别的方法
- 映射器实现 org.apache.catalina.Mapper 接口
- 一个映射器支持一个请求协议
- getProtocol 方法负责得到 该映射器处理的协议
- map 方法返回 负责处理某个特定请求子容器的实例