码迷,mamicode.com
首页 > 其他好文 > 详细

Tomcat源码分析之—具体启动流程分析

时间:2014-12-07 23:25:53      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:配置文件   信息   守护   

从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息、Catalina.base信息,在initClassLoaders方法中初始化类加载器,然后通过反射初始化org.apache.catalina.startup.Catalina作为catalina守护进程;

一、load

bubuko.com,布布扣
Bootstrap中load流程:

  1. 反射调用Catalina的load方法。

  2. 调用Catalina的initDirs()、initNaming()初始化catalinaHome、catalina.useNaming等信息。

  3. 创建Digester对象,调用createStartDigester创建与配置Digester信息,载入Server.xml配置文件,使用Digester解析Server.xml文件,并根据Server文件的配置信息创建Server、Service、Engine、Host、Valve、Realm、Connector、Listener、Resource等对象。

  4. 设置当前Catalina为StandardServer的Catalina对象,调用initStreams。

  5. 调用StandardServer的init方法初始化Server。

    调用Bootstrap的load方法中用反射调用Catalina的load,在Catalina中初始化initDirs()路径信息,调用createStartDigester创建与配置Digester信息,载入Server.xml配置文件,使用Digester解析Server.xml文件,并根据Server文件的配置信息创建Server、Service、Engine、Host、Valve、Realm、Connector、Listener、Resource等对象,及对象的关联关系(Digester的相关知识这里就不介绍了)。由于在Digester解析Server.xml的时候已经创建Server对象,所以这里也将server的init方法初始化Server对象,至此Bootstrap执行完成,准确的说是Catalina的load载入完成。

二、start
    接着将调用Bootstrap的start方法启动容器,在start方法中也是通过反射调用Catalina的start方法,如下图:

bubuko.com,布布扣

    然后在Catalina中调用StandardServer对象的start方法启动server,在start方法中就会像我们在Tomcat源码分析之—组件启动实现分析那节中分析的一样,通过Tomcat的生命周期管理观察者模式实现对Service、Connector、Engine、Host、Context、Wrapper、Pipeline的启动,这里就不重复在讲解了;

三、注册关闭钩子(ShutdownHook)

bubuko.com,布布扣

1 if (shutdownHook == null) {2     shutdownHook = new CatalinaShutdownHook();3 }4 Runtime.getRuntime().addShutdownHook(shutdownHook);

bubuko.com,布布扣

四、调用await()与stop(),等候关闭请求与stop容器
bubuko.com,布布扣
    调用Catalina的await实际上就调用StandardServer的await如上图,等候<Server port="8006" shutdown="SHUTDOWN">在Server 8006端口上的SHUTDOWN关闭Tomcat请求。
接收到SHUTDOWN请求后调用StandardServer的stop方法与destroy方法如下图:
bubuko.com,布布扣
生命周期管理观察者模式实现对Service、Connector、Engine、Host、Context、Wrapper、Pipeline的关闭与释放资源

五、总结
    Tomcat的启动与关闭流程到此就结束了,整个流程还是比较清晰的,只要清除Tomcat的启动流程也自然就懂得了Tomcat的关闭流程,Tomcat中使用了观察者模式对Tomcat的生命周期进行了管理,了解LifecycleBase、Lifecycle、LifecycleSupport等相关类也就了解了整个流程,整个流程的时序图如下:

bubuko.com,布布扣

                                                           Tomcat启动与关闭时序图

 

文章首发地址:Solinx

http://www.solinx.co/archives/121


bubuko.com,布布扣

Tomcat源码分析之—具体启动流程分析

标签:配置文件   信息   守护   

原文地址:http://jlins.blog.51cto.com/4487484/1587330

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!