6.Engine容器
Tomcat一共有四个容器,Engine是最大的。
Engine是全局的引擎容器,它的标准实现是StandardEngine
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kBYdkhSn-1619271794419)(
)]
Engine都包括什么呢?
6.1 Host——组件
Host是Engine的子容器,表示为一个虚拟主机。
6.2 AccessLog—— 访问日志
记录客户端访问记录的。
6.3 Pipeline——管道
Tomcat每个容器都有自己独立的PipeLine,通过PipeLine可以将四个级别的容器连起来。
该图讲解的很明白,来自书《Tomcat内核设计剖析》。
PipeLine的实现类
详解请看后面笔记。
6.4 Cluster——Engine集群
集群:集群通信系统是一种用于集团调度指挥通信的移动通信系统,主要应用在专业移动通信领域。该系统具有的可用信道可为系统的全体用户共用,具有自动选择信道功能,它是共享资源、分担费用、共用信道设备及服务的多用途、高效能的无线调度通信系统。
Tomcat主要有两个集群,Host与Engine。
关于集群参考笔记:(TODO)
6.5 Realm——域
Realm对象就是一个存储了用户、密码及权限等的数据对象,他的存储方式可以是内存、xml、数据库等。作用是配合Tomcat实现资源认证模块。详细内容参见后续笔记。
6.6 LifeCycleListener——生命周期监听器
第一次debug到Engine的生命周期监听器EngineConfig的时候非常疑惑,为什么只做了一件输出Log日志的事?
下面是EngineConfig的lifecycleEvent的实现方法。
@Override
public void lifecycleEvent(LifecycleEvent event) {
// Identify the engine we are associated with
try {
engine = (Engine) event.getLifecycle();
} catch (ClassCastException e) {
log.error(sm.getString("engineConfig.cce", event.getLifecycle()), e);
return;
}
// Process the event that has occurred
if (event.getType().equals(Lifecycle.START_EVENT))
start();
else if (event.getType().equals(Lifecycle.STOP_EVENT))
stop();
}
// -------------------------------------------------------- Protected Methods
/**
* Process a "start" event for this Engine.
*/
protected void start() {
if (engine.getLogger().isDebugEnabled())
engine.getLogger().debug(sm.getString("engineConfig.start"));
}
/**
* Process a "stop" event for this Engine.
*/
protected void stop() {
if (engine.getLogger().isDebugEnabled())
engine.getLogger().debug(sm.getString("engineConfig.stop"));
}
可以看出来这个监听器只是输出了一点日志,仅此而已。
后来才想明白,因为Tomcat只用一个Engine容器,然后这个容器已经在用digester解析server.xml等xml文件的时候建立并初始化了。
6.7 Log——日志
具体内容后续笔记推出