这里只解释部分重要代码的含义。
1. 代码:
if exist "%CATALINA_HOME%/bin/setclasspath.bat" goto okSetclasspath
echo Cannot find %CATALINA_HOME%/bin/setclasspath.bat
echo This file is needed to run this program
goto end
:okSetclasspath
set BASEDIR=%CATALINA_HOME%
call "%CATALINA_HOME%/bin/setclasspath.bat" %1
if errorlevel 1 goto end
含义:若是存在setclasspath.bat,就跳到okSetclasspath执行setclasspath.bat,不然报错后转到end。
setclasspath.bat的做用是设置必要的环境变量,例如将%java_home%/lib/tools.jar加入classpath环境变量。setclasspath.bat要用到java_home的环境变量,因此说在执行到setclasspath.bat以前必须保证已经设置了java_home环境变量,无论是在代码中仍是在系统配置中。因此说,经过startup启动tomcat的惟一前提是已经设置了java_home环境变量,而经过exe安装包的方式执行不须要这个条件。 java
2. 代码:
set CLASSPATH=%CLASSPATH%%CATALINA_HOME%/bin/bootstrap.jar
含义:将%CATALINA_HOME%/bin/bootstrap.jar加入classpath环境变量。bootstrap.jar中包含将tomcat启动和中止的类。 apache
3. 代码:
set MAINCLASS=org.apache.catalina.startup.Bootstrap
set ACTION=start
……
%_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%
含义:就是执行命令:java org.apache.catalina.startup.Bootstrap start 启动tomcat。 bootstrap