类名 |
Catalina |
继承关系 |
无 |
关联类 |
StringManager Server Digester |
实现功能 |
读取配置文件,加载Tomcat关键类 Server状态管理 |
分析
要分析Catalina类,不能不对Digester有所了解,Digester是一个用于处理XML输入数据的处理器,它可以根据一系列的匹配规则来执行相应的操作。在Catalina类中,我们用Digester来读入conf/server.xml文件。
在Catalina类的源码中包含大段的设置Digester的代码,这里大致的描述一下其基本设置:
1. 为配置文件中的Server标签创建“org.apache.catalina.core.StandardServer” 实例,并用其作为参数调用Catalina中的setServer方法。
2. 为Server标签中的GlobalNamingResources标签创建"org.apache.catalina.deploy.NamingResources"实例,并用其作为参数调用StandardServer类中的setGlobalNamingResources方法。
3. 为Server标签中的Listener创建对应其className属性(必须是LifecycleLinster的子类)的实例,并用其调用StandardServer类中的addLifecycleListener方法。
4. 为Server标签中的Service创建StandardService实例,并用其调用StandardServer类中的addService方法。
5. 为Service标签中的Listener创建对应其className属性(必须是LifecycleLinster的子类)的实例,并用其调用StandardService类中的addLifecycleListener方法。
6. 为Service标签中的Executor创建StandardThreadExecutor实例,并用其调用StandardService类中的addExecutor方法。
7. 为Service标签中的Connector创建Connector实例,并用其调用StandardService类中的addConnector方法。同时将之与第六步创建的Executor关联。
8. 创建Connector的Listener。步骤同3,5.
9. 对于刚刚设置的所有规则进行全文匹配。
10. 如果有设置了Engine,将其ParentClassLoader设置为当前的ParentClassLoader,即SharedLoader(回忆Bootstrap中对于ClassLoader的描述).
基于这段代码,我们也能大致看明白Tomcat的基本架构,即
Server
-Service