概述
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 文件中.
第六行:
新聞熱點
疑難解答