轉載:http://hi.baidu.com/xiaohuiq8/blog/item/09626fed5ecde12a63d09fcf.htmlhtml
由於上一篇博文已經解釋過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. :endjava
技巧提示:
將catllina.bat文件中的位於%_RUNJAVA%前面的start "Tomcat"部分刪除後,就不會在啓動一個新窗口,因此不會出現了錯誤還來不及看的時候新窗口就自動關閉了,所以在命令行窗口中執行 startup.bat命令就能夠查看到Tomcat啓動失敗時的提示信息。apache
附: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"
:endbootstrap