解析Tomcat的启动脚本--catalina.bat

2019-10-18 15:49:15于丽

这里主要是判断 CATALINA_HOME 环境变量的值 和 CATALINA_BASE 环境变量的值是否以 分号为结尾, 如果以 分号为结尾的话, 就报错退出.

第四段脚本代码

rem Ensure that any user defined CLASSPATH variables are not used on startup,
rem but allow them to be specified in setenv.bat, in rare case when it is needed.
set CLASSPATH=
rem Get standard environment variables
if not exist "%CATALINA_BASE%binsetenv.bat" goto checkSetenvHome
call "%CATALINA_BASE%binsetenv.bat"
goto setenvDone
:checkSetenvHome
if exist "%CATALINA_HOME%binsetenv.bat" call "%CATALINA_HOME%binsetenv.bat"
:setenvDone
rem Get standard Java environment variables
if exist "%CATALINA_HOME%binsetclasspath.bat" goto okSetclasspath
echo Cannot find "%CATALINA_HOME%binsetclasspath.bat"
echo This file is needed to run this program
goto end
:okSetclasspath
call "%CATALINA_HOME%binsetclasspath.bat" %1
if errorlevel 1 goto end

设置一个临时环境变量: CLASSPATH.

如果 Tomcat 的 bin 目录下面存在 setnv.bat 脚本的话, 就执行它. 通常情况下是没有的.

继而又判断 setclasspath.bat 脚本是否存在, 如果不存在的话, 直接报错, 停止启动 Tomcat.

如果存在的话, 就去调用它, 并把 第一个参数传进去.

setclasspath.bat 这个脚本主要设置了几个环境变量

JAVA_HOME JRE_HOME JAVA_ENDORSED_DIRS = %CATALINA_HOME%endorsed _RUNJAVA = %JRE_HOME%binjava.exe _RUNJDB = %JAVA_HOME%binjdb.exe

第五段脚本代码

rem Add on extra jar file to CLASSPATH
rem Note that there are no quotes as we do not want to introduce random
rem quotes into the CLASSPATH
if "%CLASSPATH%" == "" goto emptyClasspath
set "CLASSPATH=%CLASSPATH%;"
:emptyClasspath
set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%binbootstrap.jar"
if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set "CATALINA_TMPDIR=%CATALINA_BASE%temp"
:gotTmpdir
rem Add tomcat-juli.jar to classpath
rem tomcat-juli.jar can be over-ridden per instance
if not exist "%CATALINA_BASE%bintomcat-juli.jar" goto juliClasspathHome
set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%bintomcat-juli.jar"
goto juliClasspathDone
:juliClasspathHome
set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%bintomcat-juli.jar"
:juliClasspathDone

这段代码主要做了三件事:

把 Tomcat bin 目录下的 bootstrap.jar 加入到环境变量中 设置 CATALINA_TMPDIR 环境变量的值为 Tomcat 目录下的 temp 目录 把 Tomcat bin 目录下的 tomcat-juli.jar 加入到环境变量中

第六段脚本代码

if not "%JSSE_OPTS%" == "" goto gotJsseOpts
set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
:gotJsseOpts
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
rem Register custom URL handlers
rem Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
set "JAVA_OPTS=%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"
if not "%LOGGING_CONFIG%" == "" goto noJuliConfig
set LOGGING_CONFIG=-Dnop
if not exist "%CATALINA_BASE%conflogging.properties" goto noJuliConfig
set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%conflogging.properties"
:noJuliConfig
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%"
if not "%LOGGING_MANAGER%" == "" goto noJuliManager
set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
:noJuliManager
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%"