0
点赞
收藏
分享

微信扫一扫

Tomcat的启动流程分析



文章目录

  • ​​前言​​
  • ​​Tomcat启动过程​​
  • ​​两个系统执行流程​​
  • ​​windows执行startup.bat流程​​
  • ​​Linux系统执行流程​​
  • ​​bootstrap.jar包​​
  • ​​参考文章​​
  • ​​参考文章​​

前言

本篇博客主要是对Tomcat的启动流程进行梳理,如有错误请指出。

所有博客文件目录索引:博客目录索引(持续更新)

Tomcat启动过程

两个系统执行流程

windows执行startup.bat流程

一般两种启动方式:①通过点击bin目录下的​​startup.bat​​​来启动tomcat。②cmd中输入​​catalina run​​命令,实际就是执行catalina.bat命令。

停止方式:对于①中startup.bat启动的需要再次点击shutdown.bat来停止服务器运行。对于②中cmd执行命令的关闭窗口或者按下ctrl+c即可。

下面简单描述一下执行的过程以及调用的文件

  1. 点击​​startup.bat​​:会去查看​​CATALINA_HOME​​变量若不存在,则设置​​CATALINA_HOME​​变量为本身的tomcat文件目录的bin目录,传递start参数给​​catalina.bat​​进行执行。
  2. 执行​​catalina.bat​​:其中包含设置临时变量(执行C盘文件),接着会传入start参数调用​​setclasspath.bat​​,会定义设置一些临时变量,去查看一些bin目录下jar包,conf目录下的​​logging.properties​​等等各类参数设置,判断等等。
  • 中间执行​​setclasspath.bat​​​:其中会去读取​​JAVA_HOME​​​环境变量以及​​JRE_HOME​​​变量等。(这也是为什么之前配置jdk环境变量时要配置​​JAVA_HOME​​)
  • Tomcat的启动流程分析_服务器
  1. 前面都是参数设置,判断等等,现在到达​​catalina.bat​​中的执行命令:会新开一个窗口叫做Tomcat,并且使用jdk中的工具​​java.exe​​以及各种参数配置。
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
//上面的执行命令包含许多的环境变量设置,真实执行语句示例如下
start "Tomcat" "D:\WorkSoftware\Java\jdk1.7.0_13\bin\java" -Djava.util.logging.config.file="E:\cccccccccccccccccccccccc\tomcat7.0\conf\logging.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs="E:\cccccccccccccccccccccccc\tomcat7.0\endorsed" -classpath "E:\cccccccccccccccccccccccc\tomcat7.0\bin\bootstrap.jar;E:\cccccccccccccccccccccccc\tomcat7.0\bin\tomcat-juli.jar" -Dcatalina.base="E:\cccccccccccccccccccccccc\tomcat7.0" -Dcatalina.home="E:\cccccccccccccccccccccccc\tomcat7.0" -Djava.io.tmpdir="E:\cccccccccccccccccccccccc\tomcat7.0\temp" org.apache.catalina.startup.Bootstrap start
  1. 最后调用bin目录下的bootstrapjar包中的类​​org.apache.catalina.startup.Bootstrap​​里的main方法开始执行java程序。

小总结:主要相关的三个bat执行文件,其中​​setclasspath.bat​​​会去读取JAVA_HOME的环境变量,​​catalina.bat​​在最终会去调用jar包中执行程序来开始程序的执行!



Linux系统执行流程

进入到tomcat的bin目录,输入​​./startup.sh​​,即可启动tomcat服务器。

具体流程如下:​​startup.sh​​​ —> ​​catalina.sh start​​​ —> ​​java xxxx.jar org.apache.catalina.startup.Bootstrap(main) start(参数)​​(这是在cataline.sh中启动java程序的命令)

Tomcat的启动流程分析_java_02

我们接着看一下实际启动java项目所输入的命令以及添加了些什么参数,输入命令​​ps -ef | grep tomcat​​查看

root       4060      1 15 22:47 pts/1    00:00:04 
/usr/bin/java # 执行java工具
# -D添加参数以及jar包还有其他一些配置文件等 可以看做是 - xxx.jar
-Djava.util.logging.config.file=/opt/software/apache-tomcat-8.5.66/conf/logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048
-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-Dorg.apache.catalina.security.SecurityListener.UMASK=0027
-Dignore.endorsed.dirs= -classpath /opt/software/apache-tomcat-8.5.66/bin/bootstrap.jar:/opt/software/apache-tomcat-8.5.66/bin/tomcat-juli.jar
-Dcatalina.base=/opt/software/apache-tomcat-8.5.66
-Dcatalina.home=/opt/software/apache-tomcat-8.5.66 -Djava.io.tmpdir=/opt/software/apache-tomcat-8.5.66/temp org.apache.catalina.startup.Bootstrap # 最后跟着启动的主类
start
root 4104 3949 0 22:48 pts/1 00:00:00 grep --color=auto tomcat

说明:可以看到实际通过执行​​java​​工具来进行启动服务器的,后面-D添加了一些参数和一些jar包地址以及一些工作目录如,在tomcat运行中需要。这与我们之后在本地IDEA中构建源码并启动需要添加的-D参数也有一些关联。



bootstrap.jar包

我们在​​tomcat​​​的bin目录下可以看到​​bootstrap.jar​​​包,该jar包中就包含了上面提到了的​​org.apache.catalina.startup.Bootstrap​​​类,该类中的​​main()​​方法作为入口:

Tomcat的启动流程分析_tomcat_03

  • ​jar​​​文件:实际就是​​class​​​文件的​​zip​​​压缩存档。开发中可以直接使用​​class​​文件运行,不过这样不太方便,一般使用jar包来提供发布与运行,许多工具可以直接操纵该文档,但是其本身不能表单应用程序的便签信息。

话不多说我们解压看一下就知道了:

Tomcat的启动流程分析_服务器_04

  • ​META-INF​​​:提供存档的便签信息,其中包含了三个文件。​​LICENSE​​​就是一个许可证(该许可证是apache的);​​MANIFEST.MF​​​(清单,描述jar文件中的信息的一个目录)其中包含清单版本、创建版本、主类名称(主类为​​org.apache.catalina.startup.Bootstrap​​​);​​NOTICE​​:含版权信息之类。
  • Tomcat的启动流程分析_apache_05
  • ​org​​​:其中包含的是​​java​​​的​​class​​​文件,主要是​​catalina​​​包以及​​tomcat​​​包,其中​​org.apache.catalina.startup.Bootstrap​​​在​​cataline​​包中。

下面就是​​Bootstrap​​的主类位置:

Tomcat的启动流程分析_服务器_06

通过反编译工具jad反编译​​Bootstrap.class​​​文件,就能够看到其中的​​main()​​方法:

Tomcat的启动流程分析_tomcat_07

  • 其中的286、287行就是完成了​​Tomcat​​的初始化以及启动核心过程。

说明:大致​​tomcat​​的启动流程我们就了解了,之后还需要深入源码去看其执行流程!

参考文章

  • 其中的286、287行就是完成了​​Tomcat​​的初始化以及启动核心过程。

说明:大致​​tomcat​​的启动流程我们就了解了,之后还需要深入源码去看其执行流程!

参考文章

Tomcat启动过程源码分析一 从startup.bat开始分析整个执行过程


我是长路,感谢你的耐心阅读。如有问题请指出,我会积极采纳!
欢迎关注我的公众号【长路Java】,分享Java学习文章及相关资料
Q群:851968786 我们可以一起探讨学习
注明:转载可,需要附带上文章链接




举报

相关推荐

0 条评论