How Tomcat works之 Host and Engine

回顾

这章将讨论主机和引擎。如果你想在相同的Tomcat部署中运行不止一个context,就使用一个host。理论上,如果你真有一个context,就不需要一个主机,就如Context接口中描述的那样:

 

依附在一个Context上的父类容器一般是一个主机,但是了如果没有必要就可能是其他的实现或者可能被省略。

 

在实际中,一个Tomcat 部署总是需要一个主机。这将在后面的章节中解释。

 

一个引擎代表了全部Catalinaservlet引擎。如果使用,一个引擎总是最高层的容器。需要添加到引擎中的子容器一般是Host或者Context。一个引擎默认的被用于Tocmat部署中。在这个部署中,引擎有一个主机,默认的主机。

 

这章讨论了与主机和引擎接口相关的类。以Host接口开始,后面是StandardHost,StandardHostMapper(Tomcat 4中)和StandardHostValue类。下一步,使用一个应用来演示作为一个顶层容器的host的使用。接下来讨论Engine接口,StandardEngine和StandarEngineValue类。之后一个应用显示了engine作为顶层容器的使用案例。

 

 

The Host interface

 

Host接口实现了Container接口













 

Map方法返回正确的context来处理到来的请求。这个方法在StandardHost中实现。

 

 

StandardHost

 

此类实现了Host接口。这个类继承了ContainerBase类并实现了Host和Deployer接口。

 

 

如同StandardContext和StandardWrapper一样,StandardHost的构造器添加一个基本值给它的管道。



就如所见,基本值是一个StandardHostValue的实例。

 

当启动的时候,即其start方法调用时,StandardHost添加了两个值:ErrorReportValue和ErrorDispatcherValue。






注意在tomcat 5 中,start方法相似,除了构建了JMX对象名,将在第20章中讨论。

 

 

errorReportValueClass类的值在StandardHost中由以下决定:






对于每个到来的请求,调用host的invoke方法。由于StandardHost没有自己的invoke方法的实现,则调用其父类ContainerBase中invoke方法。Invoke方法反过来调用StandardHostValue(StandardHost的基本值)的invoke方法。StandardHostValue类的invoke方法调用StandardHost类的map方法获取正确的context处理请求。Map方法的代码如下:








注意Tomcat 4中的ContainerBase类也定义了map方法,签名如下:




在Tomcat 4中StandardHostValue的invoke方法调用了ContainerBase的map方法,反过来调用StandardHost的map方法。Tomcat 5不适用一个mapper组件并且正确地context从请求对象中获取。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值