首页 > 网站 > 建站经验 > 正文

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

2019-11-02 16:40:32
字体:
来源:转载
供稿:网友

概述

Tomcat 的三个最重要的启动脚本:

startup.bat catalina.bat setclasspath.bat

上一篇咱们分析了 startup.bat 脚本

这一篇咱们来分析 catalina.bat 脚本.

至于 setclasspath.bat 这个脚本, 相信看完这一篇, 就可以自己看懂这个脚本了.
可以点击下载 [ setclasspath.bat 脚本 ]查看附注释的 setclasspath.bat 脚本

catalina.bat

这个脚本的代码有点多, 就单独弄了一篇展示 catalina.bat 脚本中的内容. 点击 [catalina.bat 脚本 ]下载查看.

下面咱们就按照脚本中的内容一行行的来分析.

@echo offsetlocal

这两个命令可以参考上一篇的文章(解析Tomcat的启动脚本--startup.bat)的解释

第一块脚本代码

rem Suppress Terminate batch job on CTRL+Cif not ""%1"" == ""run"" goto mainEntryif "%TEMP%" == "" goto mainEntryif exist "%TEMP%/%~nx0.run" goto mainEntryecho Y>"%TEMP%/%~nx0.run"if not exist "%TEMP%/%~nx0.run" goto mainEntryecho Y>"%TEMP%/%~nx0.Y"call "%~f0" %* <"%TEMP%/%~nx0.Y"rem Use provided errorlevelset RETVAL=%ERRORLEVEL%del /Q "%TEMP%/%~nx0.Y" >NUL 2>&1exit /B %RETVAL%:mainEntrydel /Q "%TEMP%/%~nx0.run" >NUL 2>&1

脚本的作用

判断用户是否使用

catalina.bat run

来启动 Tomcat 的.

如果用户使用 startup.bat 脚本启动 Tomcat, 那么这段脚本不会被执行.

这段代码看起来很乱, 慢慢分析.

第一行:

注释, 意思就是: 禁止使用 CTRL+C 来终止批处理任务, 也不知道是怎么禁止的.

第二行:

if not ""%1"" == ""run"" goto mainEntry

首先明白这里的这个 "%1" 这个变量代表的是什么? 正常情况下, 这个脚本是被 startup.bat 脚本调用的, 被调用的同时传递了一个 start 参数过来(上一篇分析得出的). 在 批处理命令 中 %1 就表示命令之后的第一个参数, 在这里指的就是 start. 所以 "%1" = start. 如果用户用 catalina.bat run 命令启动 Tomcat 的话, 那么这里的 "%1" = run.

第三行:

if "%TEMP%" == "" goto mainEntry

这里的 %TEMP% 很有可能被认为是 空, 其实这里可以读取到系统的环境变量. 所以, 这里的 %TEMP% 就是系统的环境变量值, 通常装完 windows 系统的话, 系统会自动配置上这个环境变量. 所以这里一般是有值的. 大家可以去系统的环境变量看一下它指向那个目录, 一般就是 C:/Users/用户名/AppData/Local/Temp. 注意: AppData 是一个隐藏目录.

第四行:

if exist "%TEMP%/%~nx0.run" goto mainEntry

这里又出现了一个新的东西 %~nx0 . 在批处理中, 我们知道 %1 表示的是程序之后的第一个参数, 那么 %0 呢? %0 表示这个可执行程序的名称, %~nx0 的话就是程序的名称+扩展名

在这里就是 catalina.bat . 大家可以写一个小脚本(test.bat)验证一下: (我的脚本放在 D 盘下)

脚本内容:

@echo offecho "%~nx0"echo "%1"

执行结果:

PS D:/> ./test.bat Hello"test.bat""Hello"PS D:/>

第五行:

echo Y>"%TEMP%/%~nx0.run"

这段代码很简单, 就是写入字符 Y 到 %TEMP%/catalina.bat.run 文件中.

第六行:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表