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
[javascript]
- 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=<span style="color:#ff0000;">start "%TITLE%" </span>%_RUNJAVA%
- goto gotTitle
- :noTitle
- set _EXECJAVA=start %_RUNJAVA%
红色部分删去,等号前后不能有空格