亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

分析 Tomcat catalina.bat 腳本

系統 1850 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里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實際時就將各種系統變量加以總結,輸出成這個命令。

分析 Tomcat catalina.bat 腳本


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲人成绝费网站色ww | 中文字幕视频一区二区 | 亚洲高清视频在线播放 | 欧美日韩专区 | 黄色的视频免费看 | 亚洲夜色综合久久 | 麻豆国产精品 | 亚洲另类第一页 | 欧美一级夜夜爽 视频 | 精品理论片一区二区三区 | 免费福利在线 | 中文字幕亚洲 综合久久 | 欧美日韩一区二区三区毛片 | 国产第一页精品 | 久久久伊人影院 | 四虎在线永久 | 亚洲国产一区二区三区精品 | 日韩欧美亚洲国产 | 免费亚洲视频在线观看 | 精品免费一区二区三区 | 久久精品综合一区二区三区 | 亚洲一区日韩二区欧美三区 | 欧美成人视 | 色综合久久98天天综合 | 成人99国产精品一级毛片 | 最新亚洲情黄在线网站 | 成人精品 | 色综合久久综合网 | 99热久久这里只精品国产 | 欧美日韩一本大道香蕉欧美 | 亚洲国产精品久久久天堂 | 久久一级黄色片 | 天天干天天做 | 久草新免费 | 国产精品成人久久久久久久 | 色激情综合网 | 国产色啪午夜免费视频 | 亚洲永久精品一区二区三区 | 国产不卡影院 | 亚洲精品中文字幕乱码一区二区 | 日本在线观看www鲁啊鲁视频 |