Tomcat 启动过程概览

Posted logan12138

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat 启动过程概览相关的知识,希望对你有一定的参考价值。

可以使用bin目录下的脚本启动。在代码里,启动的入口是类Bootstrap的main方法。

可以看tomcat官网的启动过程PDF

对于"start"的命令。经过了init、load、start三个方法调用。

init

用来初始化以下ClassLoader(在Tomcat-5.5版本后,有实际意义的只有commonLoader了)。

  • commonLoader
  • catalinaLoader
  • sharedLoader

commonLoader是catalinaLoader和sharedLoader的的parent。

调用

Thread.currentThread().setContextClassLoader(ClassLoader cl)

将catalinaLoader设置为当前线程的类加载器。

  • getContextClassLoader是当前线程的类加载器,避开双亲委派模型的加载方式;
  • getClassLoader()是当前类加载器,使用双亲委派模型。

然后将sharedLoader设置为类Catalina的classLoader(通过更新Catalina.class.getClassLoader()的引用)。

技术图片

 

在Server的初始化过程中,会通过遍历父加载器的方式将commonLoader挂到SystemClassLoader下 。如果通过bin目录下的脚本启动,因为脚本忽略系统classpath变量,而是使用了自定义的。所以Tomcat-9.0.27的SystemClassLoader加载Jar是Tomcat-9.0.27自定义的。见下面的两张图。

技术图片

 

 技术图片

 

 

load

 用来读取config/Server.xml的配置。重新定向System.out和System.error流。启动Server并记录启动时间。

 

start

启动Server,向JVM添加关闭钩子,并等待关闭命令。

Runtime.getRuntime().addShutdownHook(shutdownHook);

 

以上是关于Tomcat 启动过程概览的主要内容,如果未能解决你的问题,请参考以下文章

linux系统启动流程概览

scrapy按顺序启动多个爬虫代码片段(python3)

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

SOFAJRaft模块启动过程

tomcat架构分析(概览)

012在Tomcat下如何手动部署Web应用