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

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

主要是追加一系列的启动参数到 JAVA_OPTS 这个环境变量中.

第八段脚本代码

echo Using CATALINA_BASE: "%CATALINA_BASE%"
echo Using CATALINA_HOME: "%CATALINA_HOME%"
echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
if ""%1"" == ""debug"" goto use_jdk
echo Using JRE_HOME: "%JRE_HOME%"
goto java_dir_displayed
:use_jdk
echo Using JAVA_HOME: "%JAVA_HOME%"
:java_dir_displayed
echo Using CLASSPATH: "%CLASSPATH%"

主要是打印相关的环境变量信息.

第九段脚本代码

set _EXECJAVA=%_RUNJAVA%
set MAINCLASS=org.apache.catalina.startup.Bootstrap
set ACTION=start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA=

设置一些列的环境变量:

_RUNJAVA : %JRE_HOME%binjava.exe MAINCLASS : 指定了 Tomcat 的启动类, 没错 main 方法就是在这个类里面. ACTION : 动作: 就是启动 SECURITY_POLICY_FILE : 安全策略文件, 如果启动的时候加上了 -security 参数的话, 下面会对这个参数指定到 Tomcat 的 conf 目录下的 catalina.policy 文件. JPDA : 这个参数可以百度一下, 我们平时几乎用不到.

第十段代码

if not ""%1"" == ""jpda"" goto noJpda
set JPDA=jpda
if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
set JPDA_TRANSPORT=dt_socket
:gotJpdaTransport
if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
set JPDA_ADDRESS=localhost:8000
:gotJpdaAddress
if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
set JPDA_SUSPEND=n
:gotJpdaSuspend
if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
:gotJpdaOpts
shift
:noJpda

好像直接从第一行跳到了最后一行, 没错, 一般我没启动的时候没有加 jpda 参数的话, 这里会直接跳过, 里面的脚本是关于 JPDA 的设置等.

第十一段脚本代码

if ""%1"" == ""debug"" goto doDebug
if ""%1"" == ""run"" goto doRun
if ""%1"" == ""start"" goto doStart
if ""%1"" == ""stop"" goto doStop
if ""%1"" == ""configtest"" goto doConfigTest
if ""%1"" == ""version"" goto doVersion
echo Usage: catalina ( commands ... )
echo commands:
echo debug Start Catalina in a debugger
echo debug -security Debug Catalina with a security manager
echo jpda start Start Catalina under JPDA debugger
echo run Start Catalina in the current window
echo run -security Start in the current window with security manager
echo start Start Catalina in a separate window
echo start -security Start in a separate window with security manager
echo stop Stop Catalina
echo configtest Run a basic syntax check on server.xml
echo version What version of tomcat are you running?
goto end

好似一个 switch 开关.

如果我们用 startup.bat 启动 Tomcat 的话, 这里的 "%1" 的值是 start 如果通过 catalina.bat run 启动 Tomcat 的话, 这里的 "%1" 的值是 run

第十二段脚本代码

:doRun
shift
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set "SECURITY_POLICY_FILE=%CATALINA_BASE%confcatalina.policy"
goto execCmd
:doStart
shift
if "%TITLE%" == "" set TITLE=Tomcat
set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set "SECURITY_POLICY_FILE=%CATALINA_BASE%confcatalina.policy"
goto execCmd