首先分析一下其中的两个 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》









