标签:loader 类加载 sha tco ima 方法调用 启动过程 bin bootstra
可以使用bin目录下的脚本启动。在代码里,启动的入口是类Bootstrap的main方法。
可以看tomcat官网的启动过程PDF
对于"start"的命令。经过了init、load、start三个方法调用。
用来初始化以下ClassLoader(在Tomcat-5.5版本后,有实际意义的只有commonLoader了)。
commonLoader是catalinaLoader和sharedLoader的的parent。
调用
Thread.currentThread().setContextClassLoader(ClassLoader cl)
将catalinaLoader设置为当前线程的类加载器。
然后将sharedLoader设置为类Catalina的classLoader(通过更新Catalina.class.getClassLoader()的引用)。
在Server的初始化过程中,会通过遍历父加载器的方式将commonLoader挂到SystemClassLoader下 。如果通过bin目录下的脚本启动,因为脚本忽略系统classpath变量,而是使用了自定义的。所以Tomcat-9.0.27的SystemClassLoader加载Jar是Tomcat-9.0.27自定义的。见下面的两张图。
用来读取config/Server.xml的配置。重新定向System.out和System.error流。启动Server并记录启动时间。
启动Server,向JVM添加关闭钩子,并等待关闭命令。
Runtime.getRuntime().addShutdownHook(shutdownHook);
标签:loader 类加载 sha tco ima 方法调用 启动过程 bin bootstra
原文地址:https://www.cnblogs.com/Logan12138/p/12003220.html