2. TOMCAT学习——TOMCAT的启动过程

2. TOMCAT学习——TOMCAT的启动过程TOMCAT 的启动过程 Tomcat 的启动入口是 Bootstrap 类的 main 方法

  • TOMCAT的启动过程

    Tomcat的启动入口是 Bootstrap 类的main方法Bootstrap 会初始化一些基础环境,比如设置环境变量和默认类加载器。然后调用 Catalina 的方法来加载和启动Tomcat。
    启动过程总体分为两个步骤:

    load(); start(); 
  1. load方法会根据配置文件加载整个TOMCAT,将TOMCAT的所有组件按照设计好的结构装配起来。整个load的过程中最重要的地方在Catalina 中。Catalina 的load方法会去解析 Server.xml 文件并且加载文件中包含的组件。

    load

    <!--这里剔除了一些无关的组件内容--> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="/test" docBase="test"/> </Host> </Engine> </Service> </Server> 

    以上述文件为例。
    TOMCAT解析 Server.xml 的时序图如下
    在这里插入图片描述

     1. Catalina调用自己的parse方法开始解析Server.xml 2. 读取到Server标签,实例化Server,将Server关联到Catalina。 3. 读到Listener标签,将Listener关联到Server。 4. 读到Service标签,将Service关联到Server。 5. 读到Connector标签,将Connector关联到Service。 6. 读到Engine标签,将Engine关联到Service。 7. 读到Host标签,将HOST关联到Engine。 8. 读到Context标签,将Context关联到Host。 实际上整个load的过程就是从外到内,一步步实例化,并将子容器关联到父容器的过程。 
  2. start方法会一层层的启动TOMCAT,直至整个TOMCAT启动完成或者遇到异常启动失败。

    start

    1. Catalina调用Server的启动方法。
    2. Server遍历自己的Service列表,启动所有的Service。
    3. Service启动Connector列表中所有的Connector。
    4. Service启动默认容器Engine。
    5. Engine启动所有的直接子容器Host。
    6. Host部署并启动所有的Context。
    7. Context解析并启动所有的Wrapper。

    这里比较重要的两个点:

     1. Host的start方法中会部署所有的Context。(在之前的文章中说过,context容器对应的是servlet应用) 2. Context的start方法中会解析web应用中的web.xml并初始化Wrapper。(Wrapper对应的是具体的servlet) 

  • TOMCAT启动时序图
    在这里插入图片描述

    这个时序图对应了上面所有的内容(parse方法就是解析Server.xml的过程)。

    这里省略了一些细节的部分,从宏观上描述了TOMCAT启动的大体流程。

今天的文章 2. TOMCAT学习——TOMCAT的启动过程分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-02 11:21
下一篇 2025-01-02 11:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/99734.html