学习tomcat 小记(2)

[size=medium]1)Container
container用于处理对servlet的请求,并未客户端填充resposne对象。container由org.apache.catalina.Container接口表示。共有四种类型的container:engine,host,context和wrapper。

container必须实现org.apache.catalina.Container接口。然后将container实例设置到connector的setContainer方法中。这样,connector就可以调用container的invoke方法了。

首先要注意的是,在tomcat中,共有四种类型的container,分别由不同的概念层次:
 engine:表示tomcat的整个servlet引擎;
 host:表示包含有一个或多个context的虚拟机;
 context:表示一个web应用。一个context中可以有多个wrapper;
 wrapper:表示一个独立的servlet。

container中可以包含一些支持的组件,如Loader,logger,Manger,Realm和Resources等,提供了getter和setter方法进行访问。

如果对servlet的过滤器有所了解的话,就不难理解pipeline和valve是如何工作的。pipeline就像是filter链,每个valve就像是一个过滤器。实际上,valve与过滤器类似,它可以控制传递给它的request和response对象。当一个valve处理结束后,它就调用pipeline中的下一个valve进行处理。basic valve总是最后被调用的。
container中有一个pipeline。当调用了container的invoke方法后,container将处理过程交给它的pipeline,而pipeline会 调用它的第一个valve,valve执行完后会调用后续的valve,知道所有的valve都调用结束。

2) Context
本节的程序展示了如何使用context和wrapper。在程序中是了一个mapper(一个组件)来帮助context选择某个wrapper来处理特殊的请求。

container中可以包含有多个mapper来支持不同的请求协议。例如,一个mapper处理HTTP协议请求,另一个mapper处理HTTPS协议的请求。org.apache.catalina.Mapper接口定义如下所示:
package org.apache.catalina;
public interface Mapper {
public Container getContainer();
public void setContainer(Container container);
public String getProtocol();
public void setProtocol(String protocol);
public Container map(Request request, boolean update);
}
其中setProtocol和getProtocol指明了该mapper负责处理哪种协议,map方法返回使用哪个子container处理特殊的请求。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值