<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 2,  comments - 0,  trackbacks - 0
    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   如果%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位置

    :doStart
    shift        將%2里的值轉到%1
    if not "%OS%" == "Windows_NT" goto noTitle  如果OS變量不為Windows_NT,轉到noTitle
    set _EXECJAVA=start "Tomcat" %_RUNJAVA%       設定_EXECJAVA變量的值
    goto gotTitle      轉到gotTitle位置
    :noTitle
    set _EXECJAVA=start %_RUNJAVA%    設定 _EXECJAVA 變量的值
    :gotTitle              
    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位置

    :doStop
    shift                 將%2里的值轉到%1
    set ACTION=stop       將ACTION的變量設為stop
    set CATALINA_OPTS=    設CATALINA_OPTS為空
    goto execCmd          轉到execCmd位置

    :doVersion            顯示tomcat版本號
    %_EXECJAVA% -classpath "%CATALINA_HOME%\server\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變量中

    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        如果JPDA變量不為空,轉到doJpda位置
    if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
    如果SECURITY_POLICY_FILE變量不為空,轉到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  
    如果SECURITY_POLICY_FILE變量不為空,轉到doSecurityJpda位置,為空執行下面命令,并結束該程序  

    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

    終結:

       catalina.bat咋一看還以為是什么windows程序,可以雙擊運行,實際上就是調用java命令運行Bootstrap類。從上面代碼可以看出tomcat確實是一個純java的程序,腳本最后都變成直接使用java命令執行程序,與我們普通寫的java程序,沒有什么不同。只不過由于 tomcat可以使用各種眾多的模式(如debug,Security等),以及各種需要各種參數所以不得不使用腳本來執行。

       如果你想看看你到底使用了什么命令可以在“if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity”這行下面添加兩行。
           echo  %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dir ....(下面那段,是一行但太長,折行了)
           pause
       第一行的命令是打印這具話,系統會將% %里面的變量提換成找到的值并輸出。第二行是暫停程序,你可以通過任意鍵來恢復運行。
       下面是我的程序打印的結果:

    start "Tomcat" "C:\Program Files\Java\jdk1.6.0_01\bin\java"  -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="C:\work\tomcat\conf\logging.properties" -Xms128m -Xmx512m -Dfile.encoding=UTF8 -Duser.timezone=GMT -Djava.security.auth.login.config=C:\work\tomcat/conf/jaas.config   -Djava.endorsed.dirs="C:\work\tomcat\common\endorsed" -classpath "C:\Program Files\Java\jdk1.6.0_01\lib\tools.jar;C:\work\tomcat\bin\bootstrap.jar" -Dcatalina.base="C:\work\tomcat" -Dcatalina.home="C:\work\tomcat" -Djava.io.tmpdir="C:\work\tomcat\temp" org.apache.catalina.startup.Bootstrap  start

        start "tomcat"是另開一個窗口,窗口名是tomcat的意思,你可以去掉這部分,完將你程序打印的拷貝到命令行下,點回車,看是不是一樣運行 tomcat了。Catalina.bat startup實際時就將各種系統變量加以總結,輸出成這個命令。   呵呵!

    原文來自:http://profects.blog.sohu.com/99409747.html
    posted on 2013-04-23 16:55 wilsonyq 閱讀(1576) 評論(0)  編輯  收藏 所屬分類: Tomcat

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 不卡精品国产_亚洲人成在线 | 免费人妻av无码专区| 18女人毛片水真多免费| 高清一区二区三区免费视频| A毛片毛片看免费| 黄视频在线观看免费| 插鸡网站在线播放免费观看| 黄桃AV无码免费一区二区三区| aa级毛片毛片免费观看久| 中文永久免费观看网站| 中文字幕无码免费久久9一区9 | 亚洲欧美第一成人网站7777 | 亚洲久本草在线中文字幕| 久久久久无码精品亚洲日韩 | 亚洲成a人片在线观看国产| 亚洲国产成人爱av在线播放| 亚洲国产一级在线观看 | 无码欧精品亚洲日韩一区夜夜嗨 | 免费人成网站在线播放| 四虎在线播放免费永久视频| 亚洲成av人片一区二区三区| 亚洲精品国产精品乱码不99| 久久久久无码精品亚洲日韩| 亚洲人成在久久综合网站| 亚洲一区二区三区写真| 国产亚洲综合一区二区三区| 特级毛片爽www免费版| 两个人看的www免费高清| 九九精品成人免费国产片| 亚洲精品视频免费看| 麻豆最新国产剧情AV原创免费| 免费的一级片网站| 亚洲AV无码成H人在线观看| 亚洲狠狠婷婷综合久久久久| 亚洲自偷精品视频自拍| 亚洲精品无码永久在线观看男男| 免费人人潮人人爽一区二区| 久久久高清日本道免费观看| 国产卡一卡二卡三免费入口| 又黄又大又爽免费视频| 亚洲AV无码一区二区乱子伦|