- TOMCAT的启动过程
Tomcat的启动入口是 Bootstrap 类的main方法。Bootstrap 会初始化一些基础环境,比如设置环境变量和默认类加载器。然后调用 Catalina 的方法来加载和启动Tomcat。
启动过程总体分为两个步骤:load(); start();
- 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的过程就是从外到内,一步步实例化,并将子容器关联到父容器的过程。
- start方法会一层层的启动TOMCAT,直至整个TOMCAT启动完成或者遇到异常启动失败。
start
- Catalina调用Server的启动方法。
- Server遍历自己的Service列表,启动所有的Service。
- Service启动Connector列表中所有的Connector。
- Service启动默认容器Engine。
- Engine启动所有的直接子容器Host。
- Host部署并启动所有的Context。
- Context解析并启动所有的Wrapper。
这里比较重要的两个点:
1. Host的start方法中会部署所有的Context。(在之前的文章中说过,context容器对应的是servlet应用) 2. Context的start方法中会解析web应用中的web.xml并初始化Wrapper。(Wrapper对应的是具体的servlet)
- TOMCAT启动时序图
这个时序图对应了上面所有的内容(parse方法就是解析Server.xml的过程)。
这里省略了一些细节的部分,从宏观上描述了TOMCAT启动的大体流程。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/99734.html