Tomcat 版本:apache-tomcat-7.0.23-windows-x64.zip (直接加壓使用)
Tomcat 解壓目錄:D:\tomcat-7.0.23(“Tomcat 解壓目錄” 根據具體情況改變 )
提示:我是在cmd中,轉到 D:\tomcat-7.0.23\bin 目錄下運行 startup.bat ,所以我的當前工作目錄爲:D:\tomcat-7.0.23\bin ,以此目錄爲例進行詳解
在Tomcat中 catalina.bat 纔是真正的執行 Tomcat 啓動和關閉的批處理程序
一、catalina.bat詳解部分代碼:
rem Get standard Java environment variables
if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath//檢查是否存在 setclasspath.bat 文件
echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"//如果不存在,提示找不到setclasspath.bat 文件
echo This file is needed to run this program
goto end
:okSetclasspath
call "%CATALINA_HOME%\bin\setclasspath.bat" %1 //運行setclasspath.bat 文件
if errorlevel 1 goto end
rem quotes into the CLASSPATH
if "%CLASSPATH%" == "" goto emptyClasspath//如果CLASSPATH 變量沒有設置,跳轉emptyClasspath
set "CLASSPATH=%CLASSPATH%;"
:emptyClasspath
set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"// 追加 bootstrap.jar 文件目錄爲CLASSPATH 環境變量
// bootstrap.jar 是Tomcat 的內核,bootstrap.jar 同時引用了另外一個jar 包:commons-daemon.jar
// 可以用解壓文件查看bootstrap.jar\META-INF\MANIFEST.MF 文件,裏面的Class-Path值爲: commons-daemon.jar
//Main-Class 值爲:org.apache.catalina.startup.Bootstrap ,說明Tomcat主啓動程序的類爲Bootstrap
set _EXECJAVA=%_RUNJAVA%
set MAINCLASS=org.apache.catalina.startup.Bootstrap//設置主啓動類
set ACTION=start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA=
:doStart
shift
if not "%OS%" == "Windows_NT" goto noTitle
if "%TITLE%" == "" set TITLE=Tomcat//設置TITLE (標題)參數爲“Tomcat”
set _EXECJAVA=start "%TITLE%" %_RUNJAVA% //在新窗口執行命令
二、setclasspath.bat
rem In debug mode we need a real JDK (JAVA_HOME)
if ""%1"" == ""debug"" goto needJavaHome //debug 模式下需要設置JAVA_HOME環境變量
rem Otherwise either JRE or JDK are fine
if not "%JRE_HOME%" == "" goto gotJreHome //如果設置了JRE_HOME 變量,跳轉gotJreHome
if not "%JAVA_HOME%" == "" goto gotJavaHome //如果設置了JAVA_HOME 變量,跳轉gotJavaHome
echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined//提示沒有設置JAVA_HOME、JRE_HOME環境變量
echo At least one of these environment variable is needed to run this program
goto exit
:needJavaHome
rem Check if we have a usable JDK
if "%JAVA_HOME%" == "" goto noJavaHome //如果沒設置JAVA_HOME變量,跳轉noJAVAHOME
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome//檢查所需可執行文件
if not exist "%JAVA_HOME%\bin\javaw.exe" goto noJavaHome
if not exist "%JAVA_HOME%\bin\jdb.exe" goto noJavaHome
if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome
set "JRE_HOME=%JAVA_HOME%"//JAVA_HOME環境完整,將JAVA_HOME變量賦值JRE_HOME
goto okJava
總結:
1. 許多參數,類似於classpath之類的環境變量在批處理文件執行後就會覆蓋系統設置的變量,批處理文件結束後,系統的變量纔會生效,所以在批處理文件執行期間需要修改classpath文件可在批處理文件中設置
2. 運行Tomcat 只需設置JAVA_HOME 環境變量,CATALINA_HOME 環境變量會從執行 startup.bat 的當前目錄 CD 變量中賦值
3. 想要在Tomcat啓動失敗後能看到一閃而過的窗口,可修改 catalina.bat 文件下的代碼
:doStart
shift
if not "%OS%" == "Windows_NT" goto noTitle
if "%TITLE%" == "" set TITLE=Tomcat
set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
goto gotTitle
:noTitle
set _EXECJAVA=start %_RUNJAVA%
紅色部分刪去,等號前後不能有空格