Tomcat启动过程源码分析(一)

本文详细分析了Tomcat的启动过程,从`startup.bat`开始,涉及环境变量`CATALINA_HOME`的检测,`catalina.bat`中包括的环境再次检查、`CATALINA_BASE`配置、`setenv.bat`和`setclasspath.bat`的调用。在`setclasspath.bat`中,重点关注了`JAVA_HOME`和`JRE_HOME`的设定,以及`JAVA_ENDORSED_DIR`的处理,确保Java相关配置正确无误,为Tomcat的正常启动奠定基础。

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

1.stratup.batp批处理文件

1. 环境监测

在这里插入图片描述
CATALINA_HOME:类似于JAVA_HOME的环境变量,其实本质是指的一个文件夹的路径,是tomcat目录中bin目录的上层目录

# 将当前目文件目录绝对路径,赋值给CURRENT_DIR变量
set "CURRENT_DIR = %cd%"
# 如果CATALINA_HOME == "",判断结果为TRUE,这个环境变量对应的值为空串,if not
# ture得到false,这行set "CATALINA_HOME=%CURRENT_DIR%",将CURRENT_DIR值赋
# 值给CATALINA_HOME变量,判断%CATALINA_HOME%\bin\catalina.bat是否存在,
# 若存在跳转okHome,否则反回当前目录上级目录,设置CATALINA_HOME为当前目录
#(strat.bat文件上级目录),进入bin目录,判
# 断"%CATALINA_HOME%\bin\catalina.bat"存在,若存在跳转到:okHome,否则输出
# CATALINA_HOME环境变量错误,这个环境变量在运行程序是被需要,程序退出,否则到跳 
# 转到:okHome处执行
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

在这里插入图片描述
调用call命令执行bin\catalina.bat,传入参数start

2.catalina.bat批处理文件

1. 再次环境检测

在这里插入图片描述

2. 配置检测CATALINA_BASE

在这里插入图片描述
CATALINA_BASE就是CATALINA_HOME副本

3. 调用setenv.bat

在这里插入图片描述
apache-tomcat-9.0.64中没有这个文件,根据源码来看,这是执行的环境检测,不会出现致命错误,后续分析

3. 调用setclasspath.bat,设置java相关配置

在这里插入图片描述
传入引用参数,若果setclasspath.bat缺失会产生致命错误,导致程序退出

1.debug

在这里插入图片描述

  1. 为debug跳转到needJavaHome
    在这里插入图片描述
    如果JAVA_HOMEB变量值为空,报错,程序退出
    如果JAVA_HOMEbin目录下缺失java.exe,jdb.exe,javac.exe中的任何一个设置JRE_HOME=JAVA_HOME,跳转到okJava
    2.okJava
    在这里插入图片描述
    若JAVA_ENDORSED_DIR环境变量值为空串,判断CATALINA_HOME\endorsed存在,设置JAVA_ENDORSED_DIR=CATALINA_HOME\endorsed,否则跳转:gotEndorseddir处执行,判断_RUNJAVA值为空,设置_RUNJAVA=“%JRE_HOME%\bin\java.exe”,否则跳转到goRunJava
2.其它情况
rem Otherwise either JRE or JDK are fine
if not "%JRE_HOME%" == "" goto gotJreHome
if not "%JAVA_HOME%" == "" goto gotJavaHome
echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
echo At least one of these environment variable is needed to run this program
goto exit

如果JRE_HOME和JAVA_HOME都为配置,报错,程序退出
否则跳转到gotJreHome/gotJavaHome
在这里插入图片描述
若只配置了JRE_HOME,跳转gotJreHome,若果JRE_HOME\bin\java.exe,跳转noJreHome
在这里插入图片描述
程序报错,退出
若果值配置了JAVA_HOME,跳转到gotJavaHome,设置JRE_HOME=JAVA_HOME,跳转到okJava
在这里插入图片描述
上面经过判断,决定是配置java.exe还是jdb.exe,就是执行编译程序还是调试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值