关于tomcat结构,其生命周期管理方式为自上而下;在tomcat6中,每一个关键组件都实现了Lifecycle接口;而在tomcat9中,每个组件都继承了LifecycleMBeanBase类,而LifecycleMBeanBase类继承了LifecycleBase类,在LifecycleBase中实现了Lifecycle接口;所以Lifecycle是管理各个重要组件生命周期的关键;
本文将以tomcat-9.0.0.M9的源码为基础;在对具体生命周期说明之前,需要了解其基本组件的结构;
这里图中只包括了最主要的几个部分,这几个类也是tomcat中最基本的实现;
StandardServer:是tomcat状态管理的主要类,通过它管理下面多个service服务,即一个tomcat管理多个web工程;
StandardService:每个web工程对应一个StandardService;
StandardThreadExecutor:线程池;
Connector:网络接口模块;
StandardEngine:执行类;
StandardHost:一般负责管理域名部分;
StandardContext:负责管理context部分;
StandardWrapper:映射具体的URL资源;
对以上各个模块认知深度还不够,但具体的理解可以分而治之,逐个部分去进行了解。
以上各组件实际上是与server.xml相互对应的,一般通过简单的配置xml就可以修改各组件的配置。
通过我对tomcat9的server.xml解析部分的源码解读;反推出了一个较为完整的文件的节点配置结构:
这上面只有节点的名称,对应的xml中配置的节点;图中的父节点指向子节点;每个节点的属性则需要在对各功能模块深入了解中,才能明白作用。
图中的server、service、engine、host、context、executor等,与基本组件相互对应。
从上图中,可以对tomcat的所有功能模块有大概的认知。从中可以发现一些较为核心的节点;例如GlobalNamingResources、Connector、Cluster、Context等,这些模块涉及功能较多,也是具体实现的关键。
接口Lifecycle中包含了对组件行为的约束,init、start、stop、destory等,以及内部的监听。