欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tomcat的启动流程

程序员文章站 2024-02-28 23:46:04
...

在上一篇中,我们是自己配置启动的路径。通过手动启动。
那么,再实际的操作中,我们通常用的都是core版本来使用的,里面是没有上篇我们配置的那个路径的,那么是如何启动的呢。

1,通过bin路径startup.bat(linux环境下是startup.sh)的文件来启动的。
tomcat的启动流程
2,查看startup.bat

setlocal

rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"
if not "%CATALINA_HOME%" == "" goto gotHome
set "CATALINA_HOME=%CURRENT_DIR%"
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
cd ..
set "CATALINA_HOME=%cd%"
cd "%CURRENT_DIR%"
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome

set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec
echo Cannot find "%EXECUTABLE%"
echo This file is needed to run this program
goto end
:okExec

rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs

call "%EXECUTABLE%" start %CMD_LINE_ARGS%

:end
  • 这段代码其实总结就一句话就是通过startup.bat启动catalina.bat

3,启动catalina.bat
这里代码比较多
截取一部分比较便于理解的部分


set MAINCLASS=org.apache.catalina.startup.Bootstrap
set ACTION=start

rem Execute Java with the applicable properties
%_EXECJAVA% %LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

简单理解上面的逻辑,

  • 设置一个变量MAINCLASS=Bootstrap,
  • 然后设置ACTION=start
  • 在文件的结尾,执行Bootstrap
    (也就是Bootstrap.main())

4,执行Bootstrap的main()方法。
(由此tomcat就开始正式的执行了)

Bootstrap的main方法执行什么功能,之后在详细分析

这里要是有读者感觉到对一些细节还是不清楚可以多了解
扩展文章:
详细版的tomcat启动流程https://www.cnblogs.com/tanshaoshenghao/p/10932306.html
关于java中main方法
https://segmentfault.com/a/1190000039013829