tomcat学习笔记之servlet 容器

1、servlet 容器用来处理请求servlet资源、为客户端封装Response 对象的模块

2、tomcat 容器分四种:

  • Engine:整个Catalina servlet 引擎
  • Host:包含一个或多个Context 容器的虚拟主机
  • Context:表示一个web应用程序
  • Wrapper:表示一个独立的servlet

3、Container 接口

  • Engine接口,标准实现类 StandardEngine
  • Host接口,标准实现类 StandardHost
  • Context接口,标准实现类 StandardContext
  • Wrapper接口,标准实现类 StandardWrapper
  • 四个借口都继承至Container 接口
  • 实现类都继承至ContainerBase 抽象类 
  • 在org.apache.catalina.core包里面

4、一个容器可以有0个或多个低级子容器

  • Engine > Host >Context > Wrapper
  • 包含关系 不可以倒置

5、容器可以包含支持的组件:

  • 载入器、记录器、管理器、领域、资源等
  • loader、logger、manager、realm、Resource

6、部署应用时,tomcat 管理员可以通过编辑配置文件(server.xml)来决定使用哪种容器

  • 这是通过引入容器中的管道(pipeline)和阀(value)的集合来实现的

7、管道任务

  • Pipeline接口
  • Value 接口
  • ValueContext 接口
  • Contained 接口
  • 在org.apache.catalina包里面

8、管道包含该servlet 容器将要调用的任务

  • 一个阀表示一个要具体执行的任务
  • servlet 容器的管道中,有一个基础阀
  • 可以添加任意数量的阀(数量不包括基础阀)
  • 可以编辑tomcat 配置文件动态添加阀

171353_0U9z_3847203.png

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

172319_sDM4_3847203.png

9、管道必须保证添加到其中的所有阀和基础阀都被调用一次

  • 通过创建ValueContext 接口实例实现的
  • ValueContext是管道的内部类实现,所以ValueContext 接口可以访问到管道所有成员
  • ValueContext 最重要方法

173833_WMDE_3847203.png

  • 创建ValueContext 实例后,实例会调用 invokeNext 方法
  • 先调用第一个阀,执行完后调用后面的阀
  • ValueContext 实例将自身传递给阀,每个阀都能调用ValueContext 实例的invokeNext 方法
  • 一个实现了ValueContext 接口的内部类 StandardPipelineValueContext

10、Contained 接口

  • 阀可以选择是否实现该接口
  • 接口实现类可以使用接口中的方法,至多与一个servlet 容器相关联

180920_Ql9K_3847203.png

11、Wrapper 级的servlet 容器

  • 表示一个独立级的servlet 定义
  • Wrapper 接口实现类负责管理其基础servlet 类的servlet 周期
  • 调用servlet 的init、service、destory方法
  • 最低级servlet 容器,不能添加子容器
  • 重要方法load 、allocate
  • load 方法载入并初始化servlet 类

12、Wrapper 应用程序

核心类 SimpleWrapper 

  • 包含一个Pipeline 实例
  • Pipeline 实例包含一个基础阀(SimpleWrapperValue)和两个额外阀
  • 两个额外阀:ClientIPLoggerValue、HeaderLoggerValue
  • 使用一个Loader 实例载入servlet 类
  • Wrapper 实例的基础阀调用servlet 实例的 service() 方法

13、Context 应用程序

  • 当应用程序中有多个Wrapper 实例时,需要使用映射器
  • 映射器是组件,帮助servlet 容器,选择一个子容器来处理servlet 请求
  • 映射器仅仅存在于tomcat4中,tomcat5使用了别的方法
  • 映射器实现 org.apache.catalina.Mapper 接口
  • 一个映射器支持一个请求协议
  • getProtocol 方法负责获得 该映射器处理的协议
  • map 方法返回 负责处理某个特定请求子容器的实例

转载于:https://my.oschina.net/u/3847203/blog/1826905

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值