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

分析 Tomcat catalina.bat 腳本

系統(tǒng) 2130 0

Catalina.bat是tomcat所有腳本中最重要的腳本,完成幾乎所有的tomcat操作。如啟動(dòng),關(guān)閉等等,都是由catalina.bat腳本來完成的。接下來,我將對(duì)Tomcat?catalina.bat腳本進(jìn)行分析。

????首先省去catalina.bat開頭諸多注解,這些注解主要是講解各個(gè)變量是干什么的。需要的話,自己看下英文就可以了。這里就不翻譯了。

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腳本,調(diào)用它,我的tomcat?沒有這個(gè)腳本

rem?Get?standard?Java?environment?variables
if?exist?"%CATALINA_HOME%\bin\setclasspath.bat"?goto?okSetclasspath?查看是否存在setclasspath.bat腳本,如果存在,轉(zhuǎn)到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%???設(shè)定BASEDIR變量與CATALINA_HOME變量值相同
call?"%CATALINA_HOME%\bin\setclasspath.bat"?%1???調(diào)用setclasspath.bat腳本并加上參數(shù)
if?errorlevel?1?goto?end??????如果存在錯(cuò)誤?退出

rem?Add?on?extra?jar?files?to?CLASSPATH???設(shè)定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變量不為空,跳過,轉(zhuǎn)到gotBase位置
set?CATALINA_BASE=%CATALINA_HOME%??如果為空,將CATALINA_BASE設(shè)為CATALINA_HOME變量的值
:gotBase

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

if?not?exist?"%CATALINA_HOME%\bin\tomcat-juli.jar"?goto?noJuli??如果不存在tomcat-juli.jar這個(gè)類,轉(zhuǎn)到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??設(shè)定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?,轉(zhuǎn)到use_jdk位置
echo?Using?JRE_HOME:????????%JRE_HOME%?????輸出JRE_HOME變量值
goto?java_dir_displayed??????轉(zhuǎn)到j(luò)ava_dir_displayed
:use_jdk
echo?Using?JAVA_HOME:???????%JAVA_HOME%????輸出JAVA_HOME變量值
:java_dir_displayed
????????????????????????下面幾行設(shè)定相應(yīng)變量
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,轉(zhuǎn)到doDebug,運(yùn)行debug模式
if?""%1""?==?""run""?goto?doRun????????如果%1為run,轉(zhuǎn)到doRun,運(yùn)行正常模式
if?""%1""?==?""start""?goto?doStart????如果%1為start,轉(zhuǎn)到doStart,啟動(dòng)tomcat
if?""%1""?==?""stop""?goto?doStop??????如果%1為stop,轉(zhuǎn)到doStop,關(guān)閉tocmat
if?""%1""?==?""version""?goto?doVersion?如果%1為version,轉(zhuǎn)到doVersion,顯示tomcat的版本號(hào)

echo?Usage:??catalina?(?commands?...?)?如果%1沒有上述內(nèi)容,輸出下面幾行,并結(jié)束
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里的值轉(zhuǎn)到%1
set?_EXECJAVA=%_RUNJDB%??將變量?_EXECJAVA設(shè)為_RUNJDB變量的值
set?DEBUG_OPTS=-sourcepath?"%CATALINA_HOME%\..\..\jakarta-tomcat-catalina\catalina\src\share"?
設(shè)定DEBUG_OPTS變量

if?not?""%1""?==?""-security""?goto?execCmd???
如果%1不為-security,轉(zhuǎn)到execCmd位置

shift???????將%2里的值轉(zhuǎn)到%1
echo?Using?Security?Manager???????輸出該行
set?SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
設(shè)定SECURITY_POLICY_FILE變量的值

goto?execCmd?????轉(zhuǎn)到execCmd位置

:doRun
shift????????將%2里的值轉(zhuǎn)到%1
if?not?""%1""?==?""-security""?goto?execCmd???如果%1不為-security,轉(zhuǎn)到execCmd位置
shift????????將%2里的值轉(zhuǎn)到%1
echo?Using?Security?Manager???輸出該行
set?SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
設(shè)定SECURITY_POLICY_FILE變量的值

goto?execCmd??轉(zhuǎn)到execCmd位置

:doStart
shift????????將%2里的值轉(zhuǎn)到%1
if?not?"%OS%"?==?"Windows_NT"?goto?noTitle??如果OS變量不為Windows_NT,轉(zhuǎn)到noTitle
set?_EXECJAVA=start?"Tomcat"?%_RUNJAVA%???????設(shè)定_EXECJAVA變量的值
goto?gotTitle??????轉(zhuǎn)到gotTitle位置
:noTitle
set?_EXECJAVA=start?%_RUNJAVA%????設(shè)定?_EXECJAVA?變量的值
:gotTitle??????????????
if?not?""%1""?==?""-security""?goto?execCmd???如果%1不為-security,轉(zhuǎn)到execCmd位置
shift????????????????????將%2里的值轉(zhuǎn)到%1
echo?Using?Security?Manager????????輸出該行
set?SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy??
設(shè)定SECURITY_POLICY_FILE變量的值

goto?execCmd???????轉(zhuǎn)到execCmd位置

:doStop
shift?????????????????將%2里的值轉(zhuǎn)到%1
set?ACTION=stop???????將ACTION的變量設(shè)為stop
set?CATALINA_OPTS=????設(shè)CATALINA_OPTS為空

goto?execCmd??????????轉(zhuǎn)到execCmd位置

:doVersion????????????顯示tomcat版本號(hào)
%_EXECJAVA%?-classpath?"%CATALINA_HOME%\server\lib\catalina.jar"?org.apache.catalina.util.ServerInfo???執(zhí)行該命令
goto?end??????????????結(jié)束該程序

:execCmd??????????
rem?Get?remaining?unshifted?command?line?arguments?and?save?them?in?the
以下幾行將命令參數(shù)存入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變量不為空,轉(zhuǎn)到doJpda位置
if?not?"%SECURITY_POLICY_FILE%"?==?""?goto?doSecurity
如果SECURITY_POLICY_FILE變量不為空,轉(zhuǎn)到doSecurity位置

?如果都沒有執(zhí)行下面命令,并結(jié)束該程序
%_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????????執(zhí)行下面命令,并結(jié)束該程序
%_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變量不為空,轉(zhuǎn)到doSecurityJpda位置,為空?qǐng)?zhí)行下面命令,并結(jié)束該程序??

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??執(zhí)行下面命令,并結(jié)束該程序
%_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

終結(jié):

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

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

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"是另開一個(gè)窗口,窗口名是tomcat的意思,你可以去掉這部分,完將你程序打印的拷貝到命令行下,點(diǎn)回車,看是不是一樣運(yùn)行?tomcat了。Catalina.bat?startup實(shí)際時(shí)就將各種系統(tǒng)變量加以總結(jié),輸出成這個(gè)命令。

分析 Tomcat catalina.bat 腳本


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产美女激情视频 | 玖玖精品 | 欧美日韩国产一区二区三区播放 | 国产亚洲精品美女久久久 | 免费福利视频在线观看 | 神马手机不卡影院 | a资源在线| 欧美日韩高清观看一区二区 | 国产精品美女一区二区 | 99久久精品国产麻豆 | 天天干夜操 | 久久久久久久久66精品片 | 久久精品国产亚洲欧美 | 欧美日韩国产精品va | 亚洲精品二三区伊人久久 | 久久亚洲精品专区蓝色区 | 欧美成人毛片一级在线 | 五月天精品 | 国产精品亚洲国产三区 | 777奇米影视网| 毛片在线看网站 | 欧美理论片在线观看 | 青草伊伊| 97国产精品视频观看一 | 免费精品视频 | 免费福利视频网站 | 亚洲欧洲国产精品 | 久久久久久尹人网香蕉 | 97在线视频免费 | 亚洲精品一区henhen色 | 在线观看国产精美视频 | www.天天射.com| 欧美成人免费在线观看 | 日韩一区二区三区在线免费观看 | 9999在线视频 | 天天操天天射天天舔 | 青青爽国产手机在线观看免费 | 欧美精品午夜毛片免费看 | 四虎影视永久免费观看网址 | 久久精品国产6699国产精 | 久久国产精品免费视频 |