转载:http://hi.baidu.com/xiaohuiq8/blog/item/09626fed5ecde12a63d09fcf.html
因为上一篇博文已经解释过startup.bat文件内容了,这里就光挑一些重点语句解说下:
1. if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
如果存在setenv.bat,call之
2. if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath
如果存在setclasspath.bat,跳转到okSetclasspath
3. echo Cannot find %CATALINA_HOME%\bin\setclasspath.bat
4. goto end
找不到setclasspath.bat,结束程序
5. :okSetclasspath
6. set BASEDIR=%CATALINA_HOME%
BASEDIR环境变量是setclasspath.bat需要用到的变量,在调用之前我们提前把它设置好。
7. call "%CATALINA_HOME%\bin\setclasspath.bat"
顾名思义,setclasspath.bat就是用来设置环境变量的批处理文件,文件内容附在文章后
8. set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar
这是把CLASSPATH在原来的基础上增加了%CATALINA_HOME%\bin\bootstrap.jar。注意,此处的 bootstrap.jar是Tomcat的内核,它同时用到了commons-daemon.jar和commons-logging-api.jar 等jar包,但是我们并没有把它们包含在环境变量中,怎么找到的呢?其实这是通过在bootstrap.jar中的MANIFEST.MF设置的。
接下又是设置一系列环境变量:
9. if not "%CATALINA_BASE%" == "" goto gotBase
10. set CATALINA_BASE=%CATALINA_HOME%
11. :gotBase
12. if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
13. set CATALINA_TMPDIR=%CATALINA_BASE%\temp
14. :gotTmpdir
接下来打印出各个环境变量:
15. echo Using CATALINA_BASE: %CATALINA_BASE%
16. echo Using CATALINA_HOME: %CATALINA_HOME%
17. echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
18. echo Using JAVA_HOME: %JAVA_HOME%
19. set _EXECJAVA=%_RUNJAVA%
_RUNJAVA这个环境变量是在setclasspath.bat中设置的。
20. set MAINCLASS=org.apache.catalina.startup.Bootstrap
设置启动类。
21. set ACTION=start
22. if ""%1"" == ""start"" goto doStart
23. if ""%1"" == ""stop"" goto doStop
24. :doStart
25. if not "%OS%" == "Windows_NT" goto noTitle
26. set _EXECJAVA=start "Tomcat" %_RUNJAVA%
我们知道,在Windows系统的命令行中如果用start运行某个程序,就会启动一个新窗口,这里的"Tomcat"实际上就是为新窗口设置标题而已。
27. goto gotTitle
28. :noTitle
29. set _EXECJAVA=start %_RUNJAVA%
30. :gotTitle
31. goto execCmd
32. :doStop
33. set ACTION=stop
34. :execCmd
接下来的语句貌似很复杂的样子,其实就是执行_EXECJAVA这个变量所指定的内容。
35. %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
36. :end
技巧提示:
将catllina.bat文件中的位于%_RUNJAVA%前面的start "Tomcat"部分删除后,就不会在启动一个新窗口,所以不会出现了错误还来不及看的时候新窗口就自动关闭了,因此在命令行窗口中执行 startup.bat命令就可以查看到Tomcat启动失败时的提示信息。
附:setclasspath.bat
if not "%JAVA_HOME%" == "" goto gotJavaHome
echo The JAVA_HOME environment variable is not defined
goto end
:gotJavaHome
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
goto okJavaHome
:noJavaHome
echo The JAVA_HOME environment variable is not defined correctly
echo end
:okJavaHome
if not "%BASEDIR%" == "" goto gotBasedir
echo The BASEDIR environment variable is not defined
goto end
:gotBasedir
if exist "%BASEDIR%\bin\setclasspath.bat" goto okBasedir
echo The BASEDIR environment variable is not defined correctly
goto end
:okBasedir
set JAVA_ENDORSED_DIRS=%BASEDIR%\common\endorsed
set CLASSPATH=%JAVA_HOME%\lib\tools.jar
set _RUNJAVA="%JRE_HOME%\bin\java"
:end