赞
踩
StandardServer类是Tomcat初始化流程中的第一个组件,本章需要结合“Tomcat源码分析-初始化流程” 的时序图继续看。时序图中Catalina类调用了StandardServer类的init方法,而这个模版方法是调用子类的initInternal类的,所以该类着重关注这个方法即可。
类图绘制如下:
初始化流程主要通过该类的initInternal方法完成的,而它的startInternal方法,仅仅是依次调用子组件的init方法,可略过不看。
整理initInternal和destroyInternal方法的流程图如下:
initInternal和destroyInternal是一对方法,在StandardServer类中主要是对当前组件的注册和注销。
此外,关注类图中最后几个属性,包含一个ServerSocket,是用来监听shutdown的命令的,这个逻辑还是比较容易理解的。
首先,这个类里面有一个比较难懂的概念就是GlobalNamingResources是支持JNDI资源配置的类,具体这个配置是怎么回事,还需要深究一下JavaEE的JNDI的知识。
其次,这个类的有两个文件类型的成员变量catalinaHome和catalinaBase,它们的值是通过Catalina对象获取的,根源就是tomcat配置的两个系统变量catalina.home和catalina.base,但是这两个配置直接有什么区别呢?它们的注释说明是这样的:
catalina.home : Name of the system property containing the tomcat product installati on path,即tomcat的安装目录。
catalina.base :Name of the system property containing the tomcat instance installation path,即tomcat运行实例的安装目录。
基于这两个变量的用法,找到一篇很有启发性的文章,(参考:http://blog.csdn.net/keda8997110/article/details/21400455)哪天有空可以实践下运行多个tomcat实例的过程。
最后,StandardServer类对MBeanRegistry的实现流程值得分析,这里通过Tomcat定义的Registry类完成的,它就是我下一次要分析的目标了。平时单纯的用Tomcat来部署web应用,而且都是很简单的冰山一角的用法。Tomcat如此博大精深,少年还需努力啊!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。