tomcat启动时的两个批处理脚本详解

来源:互联网 发布:北京联通网络测速 编辑:程序博客网 时间:2024/04/30 16:12

 

一.startUp.bat批处理文件解析。

startUp.bat去掉注释后的内容:

@echo off

if "%OS%" == "Windows_NT" setlocal

set "CURRENT_DIR=%cd%"

if not "%CATALINA_HOME%" == "" goto gotHome

set "CATALINA_HOME=%CURRENT_DIR%"

if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHome

cd ..

set "CATALINA_HOME=%cd%"

cd "%CURRENT_DIR%"

:gotHome

if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHome

echo The CATALINA_HOME environment variable is not defined correctly

echo This environment variable is needed to run this program

goto end

:okHome

set "EXECUTABLE=%CATALINA_HOME%/bin/catalina.bat"

if exist "%EXECUTABLE%" goto okExec

echo Cannot find "%EXECUTABLE%"

echo This file is needed to run this program

goto end

:okExec

set CMD_LINE_ARGS=

:setArgs

if ""%1""=="""" goto doneSetArgs

set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1

shift

goto setArgs

:doneSetArgs

call "%EXECUTABLE%" start %CMD_LINE_ARGS%

:end

1.该批处理首先去找catalina_home环境变量下的catalina.bat文件,如果该文件不存在,则使用当前目录下的bin/catalina.bat文件。

关于setlocal的含义:运行批处理文件时使用 setlocal 更改环境变量。运行 setlocal 后所做的环境更改是批处理文件的本地更改。Cmd.exe 在遇到 endlocal 命令或者到达批处理文件的结尾时将恢复上一次的设置。

如果EXECUTABLE变量对应的catalina.bat批处理文件存在,则执行该批处理文件,否则报错。这里的批处理使用了shift来遍历我们执行startUp.bat时传入的参数(%1表示第一个参数,取得第一个参数并组装到CMD_LINE_ARGS变量后,shift命令其实相当于shift /1,可以理解这个命令的作用为:去掉现在的第一个参数,后面的参数则向前移一位)

:setArgs

if ""%1""=="""" goto doneSetArgs

set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1

shift

goto setArgs

所以,通过上述代码,循环遍历了所有的命令行参数,组装到CMD_LINE_ARGS中,然后通过call "%EXECUTABLE%" start %CMD_LINE_ARGS%,调用catalina.bat批处理文件,并把命令行参数传递给catalina.bat。

二.catalina.bat批处理文件解析。

@echo off

if "%OS%" == "Windows_NT" setlocal

rem 得到当前目录

set "CURRENT_DIR=%cd%"    

if not "%CATALINA_HOME%" == "" goto gotHome

set "CATALINA_HOME=%CURRENT_DIR%"

if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHome

cd ..

set "CATALINA_HOME=%cd%"

cd "%CURRENT_DIR%"

:gotHome

if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHome

echo The CATALINA_HOME environment variable is not defined correctly

echo This environment variable is needed to run this program

goto end


rem 校验存在catalina.bat文件之后,执行setenv.bat,优先从CATALINA_BASE环境变量中寻找,如果没有,则在CATALINA_HOME%/bin下寻找setenv.bat并执行,如果都没有找到,则执行

rem %CATALINA_HOME%/bin/setclasspath.bat"文件。

:okHome



set CLASSPATH=


if "%CATALINA_BASE%" == "" goto gotSetenvHome

if exist "%CATALINA_BASE%/bin/setenv.bat" call "%CATALINA_BASE%/bin/setenv.bat"

goto gotSetenvBase

:gotSetenvHome

if exist "%CATALINA_HOME%/bin/setenv.bat" call "%CATALINA_HOME%/bin/setenv.bat"

:gotSetenvBase


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


if not "%CATALINA_BASE%" == "" goto gotBase

set "CATALINA_BASE=%CATALINA_HOME%"

:gotBase


if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir

set "CATALINA_TMPDIR=%CATALINA_BASE%/temp"

:gotTmpdir


if "%CLASSPATH%" == "" goto emptyClasspath

set "CLASSPATH=%CLASSPATH%;"

:emptyClasspath

if "%CATALINA_BASE%" == "%CATALINA_HOME%" goto juliClasspathHome

if not exist "%CATALINA_BASE%/bin/tomcat-juli.jar" goto juliClasspathHome

set "CLASSPATH=%CLASSPATH%%CATALINA_BASE%/bin/tomcat-juli.jar;%CATALINA_HOME%/bin/bootstrap.jar"

goto juliClasspathDone

:juliClasspathHome

set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%/bin/bootstrap.jar"

:juliClasspathDone


if not "%LOGGING_CONFIG%" == "" goto noJuliConfig

set LOGGING_CONFIG=-Dnop

if not exist "%CATALINA_BASE%/conf/logging.properties" goto noJuliConfig

set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%/conf/logging.properties"

:noJuliConfig

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%


if not "%LOGGING_MANAGER%" == "" goto noJuliManager

set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

:noJuliManager

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%


rem ----- Execute The Requested Command ---------------------------------------


echo Using CATALINA_BASE:   "%CATALINA_BASE%"

echo Using CATALINA_HOME:   "%CATALINA_HOME%"

echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"

if ""%1"" == ""debug"" goto use_jdk

echo Using JRE_HOME:        "%JRE_HOME%"

goto java_dir_displayed

:use_jdk

echo Using JAVA_HOME:       "%JAVA_HOME%"

:java_dir_displayed

echo Using CLASSPATH:       "%CLASSPATH%"


set _EXECJAVA=%_RUNJAVA%

set MAINCLASS=org.apache.catalina.startup.Bootstrap

set ACTION=start

set SECURITY_POLICY_FILE=

set DEBUG_OPTS=

set JPDA=


if not ""%1"" == ""jpda"" goto noJpda

set JPDA=jpda

if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport

set JPDA_TRANSPORT=dt_socket

:gotJpdaTransport

if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress

set JPDA_ADDRESS=8000

:gotJpdaAddress

if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend

set JPDA_SUSPEND=n

:gotJpdaSuspend

if not "%JPDA_OPTS%" == "" goto gotJpdaOpts

set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%

:gotJpdaOpts

shift

:noJpda


if ""%1"" == ""debug"" goto doDebug

if ""%1"" == ""run"" goto doRun

if ""%1"" == ""start"" goto doStart

if ""%1"" == ""stop"" goto doStop

if ""%1"" == ""version"" goto doVersion


echo Usage:  catalina ( commands ... )

echo commands:

echo   debug             Start Catalina in a debugger

echo   debug -security   Debug Catalina with a security manager

echo   jpda start        Start Catalina under JPDA debugger

echo   run               Start Catalina in the current window

echo   run -security     Start in the current window with security manager

echo   start             Start Catalina in a separate window

echo   start -security   Start in a separate window with security manager

echo   stop              Stop Catalina

echo   version           What version of tomcat are you running?

goto end


:doDebug

shift

set _EXECJAVA=%_RUNJDB%

set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%/../../java"

rem 如果有参数中有-security

if not ""%1"" == ""-security"" goto execCmd

shift

echo Using Security Manager

set "SECURITY_POLICY_FILE=%CATALINA_BASE%/conf/catalina.policy"

goto execCmd


:doRun

shift

if not ""%1"" == ""-security"" goto execCmd

shift

echo Using Security Manager

set "SECURITY_POLICY_FILE=%CATALINA_BASE%/conf/catalina.policy"

goto execCmd


: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%

:gotTitle

if not ""%1"" == ""-security"" goto execCmd

shift

echo Using Security Manager

set "SECURITY_POLICY_FILE=%CATALINA_BASE%/conf/catalina.policy"

goto execCmd


:doStop

shift

set ACTION=stop

set CATALINA_OPTS=

goto execCmd


:doVersion

%_EXECJAVA% -classpath "%CATALINA_HOME%/lib/catalina.jar" org.apache.catalina.util.ServerInfo

goto end



:execCmd

rem Get remaining unshifted command line arguments and save them in the CMD_LINE_ARGS properties

set CMD_LINE_ARGS=

:setArgs

if ""%1""=="""" goto doneSetArgs

set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1

shift

goto setArgs

:doneSetArgs


rem Execute Java with the applicable properties

if not "%JPDA%" == "" goto doJpda

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity

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

goto end

:doSecurity

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

goto end

:doJpda

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_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%

goto end

:doSecurityJpda

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

goto end


:end


正常情况执行的是start模式,效果和call catalina.bat start命令一样 ,最终执行的命令为:

start "Tomcat" "C:/Program Files/Java/jdk1.6.0_10/bin/java"  -Djava.util.logging.config.file="D:/osv/tomcat6/output/build/conf/logging.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager   -Djava.endorsed.dirs="D:/osv/tomcat6/output/build/endorsed" -classpath "D:/osv/tomcat6/output/build/bin/bootstrap.jar" -Dcatalina.base="D:/osv/tomcat6/output/build" -Dcatalina.home="D:/osv/tomcat6/output/build" -Djava.io.tmpdir="D:/osv/tomcat6/output/build/temp" org.apache.catalina.startup.Bootstrap  start

以下的输出表明了执行该批处理可以指定的参数:

echo Usage:  catalina ( commands ... )

echo commands:

echo   debug             Start Catalina in a debugger

echo   debug -security   Debug Catalina with a security manager

echo   jpda start        Start Catalina under JPDA debugger

echo   run               Start Catalina in the current window

echo   run -security     Start in the current window with security manager

echo   start             Start Catalina in a separate window

echo   start -security   Start in a separate window with security manager

echo   stop              Stop Catalina

echo   version           What version of tomcat are you running?

goto end

 

原创粉丝点击