静态块
虽然Tomcat启动是由脚本文件开始的,但是最终的启动还是在Boostrap类,我们看到这个类中有一个静态块,代码如下:
主方法
核心方法总览
静态块之后就是主方法了,核心代码如下:
这里面实例化了Bootstrap 类并调用其init方法,完成了一些初始化工作,通过传递的参数确定当前需要执行的的命令为“start”,然后调用Bootstrap类实例的load和start方法。
init方法
- 方法总览
Bootstrap作为程序入口,在实例化对象后,执行了其init方法
这里完成了类加载器的初始化工作并将其设置为当前线程的上下文加载器,然后利用反射机制实例化了Catalina类,catalinaDaemon即代表该对象的实例
- initClassLoader方法
该方法实现如下:
这里的三个加载器都是在catalina.properties 中配置的,只是有两个为空而已
load方法
catalina类的load的方法实现如下:
在这个方法里面创建了一个Digester对象,并将当前对象压入Digester里的对象栈顶,根据inputSource里设置的server.xml文件路径及所创建的Digester对象所包含的解析规则生成相应对象,并调用相应方法将对象之间关联起来。
解析xml文件的规则在createStartDigester方法中
该方法定义如下(这里只截取部分代码)
根据server.xml文件 完成相关对象的实例化,这些对象的包含关系通过server.xml文件可以看出来
这些对象包括:
org.apache.catalina.core.StandardServer
org.apache.catalina.core.StandardService
org.apache.catalina.connector.Connector
org.apache.catalina.core.StandardEngine
org.apache.catalina.core.StandardHost。。。
当然除了这些主要的容器外还有其他的对象,这里不做过多阐述.
然后调用Server接口对象的init方法。
start方法
在这里调用Server接口实现类的start方法