Catalina-Container接口

对于Catalina中的servlet容器,首先需要注意的是

4中类型的容器,分别对应不用概念层次

Engine:表示整个Catalina servlet引擎

Host:表示包含一个或多个Context容器的虚拟主机

Context:表示一个Web应用程序。一个Context可以有多个Wrapper

Wrapper:表示一个独立的Servlet

管道任务

管道包含该Servlet容器将要调用的任务。

一个阀表示一个具体的执行任务

在servlet容器的管道中,有一个基础阀,可以添加任意数量的阀。

阀的数量是指额外添加的阀数量,即不包括基础阀

管道会调用其中的第一个阀开始处理,之后会调用后续的阀。

当所有阀被调用完之后,将调用基础阀。

但是Tomcat使用了另一种调用方式

引入接口org.apache.catalina.ValueContext

通过调用容器的invoke()方法,在调用其管道的invoke()方法

public void invoke(Request request, Response response)
    throws IOException, ServletException {
    // Invoke the first Valve in this pipeline for this request
    (new SimplePipelineValveContext()).invokeNext(request, response);
  }
  public void invokeNext(Request request, Response response)
      throws IOException, ServletException {
      int subscript = stage;
      stage = stage + 1;
      // Invoke the requested Valve for the current request thread
      if (subscript < valves.length) {
        valves[subscript].invoke(request, response, this);
      }
      else if ((subscript == valves.length) && (basic != null)) {
        basic.invoke(request, response, this);
      }
      else {
        throw new ServletException("No valve");
      }
    }
Pipeline()接口

invoke()来开始调用管道中的阀和基础阀。

addValue()向管道中添加新的阀

removeValue()从管道中删除某个阀

setBasic()方法将基础阀设置到管道中

getBasic()获取基础阀

Value()接口(阀)

invoke()

getInfo()返回阀的实现信息

ValueContext()接口

getInfo()返回ValueContext的实现信息

invokeNext()首先调用管道中的第一个阀,第一个阀执行完成后,会调用后面阀继续执行,会将自身传递给下个阀

Wrapper接口

load()载入并初始化servlet类

allocate()会分配一个已经初始化的Servlet实例








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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值