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%
红色部分删去,等号前后不能有空格