zoukankan      html  css  js  c++  java
  • Tomcat源码分析之—具体启动流程分析

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

    一、load


    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方法,如下图:

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

    三、注册关闭钩子(ShutdownHook)

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

    四、调用await()与stop(),等候关闭请求与stop容器

        调用Catalina的await实际上就调用StandardServer的await如上图,等候<Server port="8006" shutdown="SHUTDOWN">在Server 8006端口上的SHUTDOWN关闭Tomcat请求。
    接收到SHUTDOWN请求后调用StandardServer的stop方法与destroy方法如下图:

    生命周期管理观察者模式实现对Service、Connector、Engine、Host、Context、Wrapper、Pipeline的关闭与释放资源

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

                                                               Tomcat启动与关闭时序图

    文章首发地址:Solinx

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

  • 相关阅读:
    js中箭头函数和普通函数this的区别
    jquery DOM操作(一)
    jquery选择器详细说明
    javascript 中关于function中的prototype
    html5一些容易忽略的细节
    javascript 原生得到document.Element的方法
    关于spring autowrie的5种方式
    关于FileSystemXmlApplicationContext和ClassPathXmlApplicationContext路径问题
    【Unity Shader】(十) ------ UV动画原理及简易实现
    【Unity Shader】(九) ------ 高级纹理之渲染纹理及镜子与玻璃效果的实现
  • 原文地址:https://www.cnblogs.com/softlin/p/4149617.html
Copyright © 2011-2022 走看看