tomcat的启动流程

本文介绍了Tomcat的启动过程,从通过startup.bat或startup.sh启动,到执行catalina.bat,再到Bootstrap的main()方法,逐步揭示了Tomcat如何开始运行。对于启动细节不熟悉的读者,可以参考提供的扩展阅读资料进一步学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

1,通过bin路径startup.bat(linux环境下是startup.sh)的文件来启动的。
在这里插入图片描述
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值