Catalina对象是被Bootstrap类反射调用构造方法创建的。
对于启动,会调用Catalina类的load方法加载参数,其实就是得到conf/server.xml配置文件。接着,初始化临时文件目录等等初始化工作。
里面的Server对象实例是如何初始化的呢?就是load方法里面运用digester技术初始化的Catalina对象的Server的成员的。
之后设置server的catalina为当前对象,设置server对象的catalina.home,设置server对象的catalina.base,初始化流,最后调用server的init方法将初始化流程交给server对象。
思考,此时catalina具有了完备的组件了,那么,catalina都有那些组件呢?
主要的两个conf/server.xml文件,导致了初始化了唯一重要的组件Server,配置文件里面几乎全是Server的组件初始化。
通过查看server.xml文件的结构,就可以看出组件间的包含和依赖关系。
Catalina是这个总的类,而Bootstrap只是启动Catalina而已。
Catalina内部包含Server,Server里面包含有Executor,Service,而Service里面包含Connector,包含Engine,而Engin里面包含Host,而Host里面包含Context,而Context就是真正的web应用。
从server.xml结构看,Connector和Context就是不直接联系的,这一点,设计的是非常好的,利用了解耦的特点,将使用的协议和具体利用协议的应用解耦。