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

Tomcat 启动过程概览

时间:2019-12-07 21:39:21      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:loader   类加载   sha   tco   ima   方法调用   启动过程   bin   bootstra   

可以使用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 启动过程概览

标签:loader   类加载   sha   tco   ima   方法调用   启动过程   bin   bootstra   

原文地址:https://www.cnblogs.com/Logan12138/p/12003220.html

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