Tomcat源码分析 -- 5
2019-03-07 本文已影响0人
sschrodinger
Tomcat源码分析 -- 5
sschrodinger
2018/01/01
参考
- 《深入剖析 Tomcat》 - 基于Tomcat 4.x
- 《Tomcat 架构解析》刘光瑞 著
- 《大话设计模式》程杰 著
- Tomcat 8.5.x 源码
server组件
Server 组件是 Catalina 直接持有的对象。通过 org.apache.catalina.startup.Catalina
类的 createStartDigester()
创建并持有,具体语句如下:
digester.addObjectCreate("Server",
"org.apache.catalina.core.StandardServer",
"className");
digester.addSetProperties("Server");
digester.addSetNext("Server",
"setServer",
"org.apache.catalina.Server");
server 组件的默认实现org.apache.catalina.core.StandardServer
继承 org.apache.catalina.util.LifecycleMBeanBase
并实现了 org.apache.catalina.Server
接口,主要功能是持有多个 service 组件和全局名命服务组件。
同时,我们可以看到在 Catalina 类的 start()
方法中,有 await()
代码片段。该片段调用 Catalina 类持有的 server 组件的 await()
方法,等待 server 的结束, 所以,Server 组件的实现也保证了 server 可以控制整个 服务器的生命周期。
service 组件
service 组件持有多个 Connector 组件和 Container 组件。除了 Connector 组件和 Container 组件,service 组件还持有了 Mapper ,用于实现 servlet API 的映射规则。
note
- tomcat 有四种 Container 组件,分别实现了 Engine 接口,Host 接口,Context 接口和 wrapper 接口。service 类只直接持有顶层组件,即 Engine 组件。