分析 Tomcat catalina.bat 腳本

   Catalina.bat是tomcat所有腳本中最重要的腳本,完成幾乎所有的tomcat操作。如啓動,關閉等等,都是由catalina.bat腳本來完成的。接下來,我將對Tomcat catalina.bat腳本進行分析。

    首先省去catalina.bat開頭諸多註解,這些註解主要是講解各個變量是幹什麼的。需要的話,自己看下英文就可以了。這裏就不翻譯了。

rem Guess CATALINA_HOME if not defined  查看是否在tomcat目錄下,與startup.bat裏相同,不解釋了。需要的話可以看我的另一篇博客。
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

rem Get standard environment variables
if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat" 如果存在setenv.bat腳本,調用它,我的tomcat 沒有這個腳本

rem Get standard Java environment variables
if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath 查看是否存在setclasspath.bat腳本,如果存在,轉到okSetclasspath位置
echo Cannot find %CATALINA_HOME%\bin\setclasspath.bat 否則輸出下面兩行,並退出
echo This file is needed to run this program
goto end
:okSetclasspath    okSetclasspath位置

set BASEDIR=%CATALINA_HOME%   設定BASEDIR變量與CATALINA_HOME變量值相同
call "%CATALINA_HOME%\bin\setclasspath.bat" %1   調用setclasspath.bat腳本並加上參數
if errorlevel 1 goto end      如果存在錯誤 退出

rem Add on extra jar files to CLASSPATH   設定JSSE_HOME變量,如果存在加入CLASSPATH,不存在跳過

if "%JSSE_HOME%" == "" goto noJsse    檢查是否存在JSSE_HOME變量
set CLASSPATH=%CLASSPATH%;%JSSE_HOME%\lib\jcert.jar;%JSSE_HOME%\lib\jnet.jar;%JSSE_HOME%\lib\jsse.jar 如果有加入到CLASSPATH變量後面
:noJsse                                  
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar  將bootstrap.jar加入到CLASSPATH裏

if not "%CATALINA_BASE%" == "" goto gotBase  如果CATALINA_BASE變量不爲空,跳過,轉到gotBase位置
set CATALINA_BASE=%CATALINA_HOME%  如果爲空,將CATALINA_BASE設爲CATALINA_HOME變量的值
:gotBase

if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir   CATALINA_TMPDIR不爲空,跳過,轉到gotTmpdir位置
set CATALINA_TMPDIR=%CATALINA_BASE%\temp   如果爲空,將 CATALINA_TMPDIR設爲%CATALINA_BASE%\temp變量的值(即tomcat\temp)
:gotTmpdir

if not exist "%CATALINA_HOME%\bin\tomcat-juli.jar" goto noJuli  如果不存在tomcat-juli.jar這個類,轉到noJuli位置
set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager - Djava.util.logging.config.file="%CATALINA_BASE%\conf \logging.properties"  如果存在,將變量加入到JAVA_OPTS裏
:noJuli


set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -Dfile.encoding=UTF8 -Duser.timezone=GMT -Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.config  設定JAVA_OPTS變量

echo Using CATALINA_BASE:   %CATALINA_BASE%     輸出CATALINA_BASE變量值
echo Using CATALINA_HOME:   %CATALINA_HOME%     輸出CATALINA_HOME變量值
echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR% 輸出CATALINA_TMPDIR變量值
if ""%1"" == ""debug"" goto use_jdk        如果變量%1裏存在debug ,轉到use_jdk位置
echo Using JRE_HOME:        %JRE_HOME%     輸出JRE_HOME變量值
goto java_dir_displayed      轉到java_dir_displayed
:use_jdk
echo Using JAVA_HOME:       %JAVA_HOME%    輸出JAVA_HOME變量值
:java_dir_displayed
                        下面幾行設定相應變量
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_shmem
:gotJpdaTransport
if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
set JPDA_ADDRESS=jdbconn
:gotJpdaAddress
if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
set JPDA_SUSPEND=n
:gotJpdaSuspend
if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
set JPDA_OPTS=-Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
:gotJpdaOpts
shift
:noJpda

if ""%1"" == ""debug"" goto doDebug    如果%1爲debug,轉到doDebug,運行debug模式
if ""%1"" == ""run"" goto doRun        如果%1爲run,轉到doRun,運行正常模式
if ""%1"" == ""start"" goto doStart    如果%1爲start,轉到doStart,啓動tomcat
if ""%1"" == ""stop"" goto doStop      如果%1爲stop,轉到doStop,關閉tocmat
if ""%1"" == ""version"" goto doVersion 如果%1爲version,轉到doVersion,顯示tomcat的版本號

echo Usage:  catalina ( commands ... ) 如果%1沒有上述內容,輸出下面幾行,並結束
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                    將%2裏的值轉到%1
set _EXECJAVA=%_RUNJDB%  將變量 _EXECJAVA設爲_RUNJDB變量的值
set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\jakarta-tomcat-catalina\catalina\src\share"
設定DEBUG_OPTS變量

if not ""%1"" == ""-security"" goto execCmd   
如果%1不爲-security,轉到execCmd位置

shift       將%2裏的值轉到%1
echo Using Security Manager       輸出該行
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
設定SECURITY_POLICY_FILE變量的值

goto execCmd     轉到execCmd位置

:doRun
shift        將%2裏的值轉到%1
if not ""%1"" == ""-security"" goto execCmd

發佈了33 篇原創文章 · 獲贊 0 · 訪問量 1880
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章