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

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

首先分析一下其中的两个 shift 命令

第一个 shift 是把 start 或者 run 参数移除, 然后下面 还是利用 "%1" 来取参数, 这时候, 取出来的就是参数列表中的第二个.

第二个 shift 是在第二个参数移除掉.

我们再来比较一下 start 和 run 的启动区别.

差别

if "%TITLE%" == "" set TITLE=Tomcat
set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
如果是 startup.bat 脚本启动的话, 会启动一个新的 cmd 窗口, 并且把 cmd 的 title 设置为 Tomcat. 如果是 catalina.bat run 启动的话, 不会新建 cmd 窗口, 也不会设置 cmd 的 title.

最后都跳到了 execCmd 标签处.

第十三段脚本代码

:execCmd
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

这里还是利用 "%1" 来取出启动命令之后的参数, 如果存的话, 追加到 CMD_LINE_ARGS 环境变量上, 并把这个参数移除.

通常情况下, 我们这里是不会有什么参数了, -security 这个参数我们都不会追加.

继续往下走.

第十四段脚本代码

rem Execute Java with the applicable properties
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end

很明显, 我们的 %JPDA% 没有值, 不会跳转; 由于我们没有加 -security 参数, 所以 %SECURITY_POLICY_FILE% 没有值, 不会跳转.

下面这段长命令就是来启动 BootStrap 类, 并把相应的参数传进去.

只要把对应的环境变量替换为它们的值, 就可以解析出这个长命令的内容. 相信你可以的. Be patient!

总结一下

    首先判断一下用户直接使用 catalina.bat run 来启动 Tocmat 设置 CATALINA_HOME 和 CATALINA_BASE 环境变量值 验证 CATALINA_HOME 和 CATALINA_BASE 环境变量值的正确性 调用 setnv.bat 脚本 调用 setclasspath.bat 脚本 添加 bootstrap.jar 和 tomcat-juli.jar 到 CLASSPATH 中 设置 CATALINA_TMPDIR 临时目录的值为 Tomcat 目录下的 temp 追加一系列的参数到 JAVA_OPTS 中 整合相关的启动信息, 参数 启动 Tomcat

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,有兴趣的朋友可以看下上篇文章《解析Tomcat的启动脚本-startup.bat》