Tomcat 八(六)catalina.bat详解

Tomcat 8(六)catalina.bat详解

catalina.bat的流程图较长,先说下结果

执行startup.bat等同于catalina.bat start,而执行catalina.bat start等同于java Bootstrap start(附带-D-classpath选项)

Tomcat就是一个java程序

--------------------------------------------------------------------------------------------------------------------------------

catalina.bat中涉及一个新的bat语法:替换变量中的某个字符

获取系统变量:%JAVA_HOME%

获取系统变量%JAVA_HOME%,%JAVA_HOME%中的a替换成****%JAVA_HOME:a=****%

创建Test.bat

@echo off
echo %JAVA_HOME%
echo %JAVA_HOME:a=****%

执行结果:

Tomcat 八(六)catalina.bat详解

catalina.bat中的%CATALINA_HOME:;=%,是将%CATALINA_HOME%;删除

catalina.bat中通过"%CATALINA_HOME%" == "%CATALINA_HOME:;=%",检查CATALINA_HOME中是否包含;

true-不包含;false-包含

-------------------------------------------------------------------------------------------------------------------------------

下面我们来看看catalina.bat(代码就不贴了。。。)

@echo off-从本条命令开始开始,关闭回显

if "%OS%" == "Windows_NT" setlocal-判断是否为Windows系统。是,则执行setlocal

以下这部分代码是删除临时文件(如果存在的话)

if not ""%1"" == ""run"" goto mainEntry
if "%TEMP%" == "" goto mainEntry
if exist "%TEMP%\%~nx0.run" goto mainEntry
echo Y>"%TEMP%\%~nx0.run"
if not exist "%TEMP%\%~nx0.run" goto mainEntry
echo Y>"%TEMP%\%~nx0.Y"
call "%~f0" %* <"%TEMP%\%~nx0.Y"
rem Use provided errorlevel
set RETVAL=%ERRORLEVEL%
del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1
exit /B %RETVAL%
:mainEntry
del /Q "%TEMP%\%~nx0.run" >NUL 2>&1

catalina.bat的流程图

Tomcat 八(六)catalina.bat详解

在catalina.bat的:end下方加入一行代码

echo %_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%

在cmd下执行startup.bat,执行结果:

Tomcat 八(六)catalina.bat详解

红框上方是默认输出;红框内是新添加的输出

将红框内的内容排一下版

start "Tomcat" "C:\Program Files\Java\jdk1.7.0_51\bin\java"
-Djava.util.logging.config.file="D:\Program Files\apache-tomcat-8.0.3\conf\logging.properties"
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.endorsed.dirs="D:\Program Files\apache-tomcat-8.0.3\endorsed"
-classpath "D:\Program Files\apache-tomcat-8.0.3\bin\bootstrap.jar;D:\Program Files\apache-tomcat-8.0.3\bin\tomcat-juli.jar"
-Dcatalina.base="D:\Program Files\apache-tomcat-8.0.3"
-Dcatalina.home="D:\Program Files\apache-tomcat-8.0.3"
-Djava.io.tmpdir="D:\Program Files\apache-tomcat-8.0.3\temp"
org.apache.catalina.startup.Bootstrap start

start-打开一个新的cmd窗口

"title"-cmd窗口的标题(执行catalina.bat starttitleTomcat)

command/program-执行的命令或程序(执行catalina.bat start时,执行的程序是java)

cmd下输入java,可看到java的可选项-D、-classpath

org.apache.catalina.startup.Bootstrap start-运行Bootstrap,并传递参数start

执行catalina.bat start,是按上图最左边的路线执行的

所以,startup.bat=catalina.bat start=java Bootstrap start(附带-D、-classpath选项)

Tomcat就是一个java程序!