一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

catalina.bat腳本解析

 丶十月丶 2011-11-28
當(dāng) startup 腳本完成環(huán)境變量的設(shè)置后,就開始調(diào)用 catalina.bat 腳本來啟動 Tomcat 。 Catalina 腳本的主要任務(wù)是根據(jù)環(huán)境變量和不同的命令行參數(shù),拼湊出完整的 java 命令行,調(diào)用 Tomcat 的主類 org.apache.catalina.startup.Bootstrap 來啟動 Tomcat 。我們先不解析該腳本,而是寫一個簡單的測試腳本來調(diào)用這個程序,看看測試結(jié)果,從而理解該腳本的調(diào)用方法。

測試腳本如下:

rem 請將 JAVA_HOME 環(huán)境變量修改到您的 JDK 安裝目錄
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09
rem 請將 CATALINA_HOME 環(huán)境變量修改到您的 Tomcat 安裝目錄
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
rem 開始調(diào)用 catalina.bat 文件
call %CATALINA_HOME%\bin\catalina.bat

我們把上面的腳本保存為 start_tomcat_nothing.bat 文件,然后在 MS-DOS 下執(zhí)行,我們將看到如下的執(zhí)行結(jié)果。




這個腳本并沒有成功啟動 Tomcat ,但是它給我們提供調(diào)用 catalina.bat 腳本的方法,請閱讀上面窗口中的加亮部分。 Catalina.bat 的調(diào)用方法為 catalina 后面加上具體命令參數(shù),這個命令參數(shù)有以下 9 種。

具體解釋如下:

debug 在調(diào)試器中啟動 Tomcat
debug -security 帶有安全管理器的調(diào)試器中,調(diào)用 catalina 腳本來啟動 Tomcat
jpda start 調(diào)用 catalina 腳本,在 JPDA 調(diào)試器中啟動 Tomcat
run 在當(dāng)前窗口內(nèi)調(diào)用 catalina 腳本來啟動 Tomcat (不切換窗口)
run -security 帶有安全管理的情況下,在當(dāng)前窗口內(nèi)調(diào)用 catalina 腳本來啟動 Tomcat (不切換窗口)
start 開始一個新的 DOS 窗口,并在其中啟動 Tomcat (切換至新窗口)
start -security 帶有安全管理的情況下,在新的 DOS 窗口中啟動 Tomcat (切換至新窗口)
stop catalina 腳本執(zhí)行停止命令來關(guān)閉 Tomcat
version 您使用的 Tomcat 版本

看完上面的解釋,我們對 Tomcat 的啟動參數(shù)有所了解。好,咱們寫一個最簡單的腳本來測試一下,拷貝剛才 start_tomcat_nothing.bat 腳本,將它重新命名為 start_tomcat_version.bat ,該腳本的內(nèi)容和 start_tomcat_nothing.bat 腳本幾乎一致,只是最后一行多加了一個 version 命令, start_tomcat_version.bat 腳本全部內(nèi)容如下:

rem 請將 JAVA_HOME 環(huán)境變量修改到您的 JDK 安裝目錄
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09
rem 請將 CATALINA_HOME 環(huán)境變量修改到您的 Tomcat 安裝目錄
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
rem 開始調(diào)用 catalina.bat 文件
call %CATALINA_HOME%\bin\catalina.bat version

我們可以在 DOS 下觀察該腳本的執(zhí)行結(jié)果。




該腳本順利執(zhí)行,執(zhí)行的結(jié)果告訴我們當(dāng)前 Tomcat 的版本號為 5.0.28 。有興趣的讀者朋友可以試試其它的 8 個命令參數(shù),這些命令參數(shù)有時對我們非常有用。舉例來說,有時候我們正常啟動 Tomcat 時, Tomcat 彈出一個 DOS 窗口,但是瞬間消失,我們看不出到底哪里出了問題,也無任何啟動日志可看。在這種情況下,我們可以使用 run 命令在同一個窗口內(nèi)啟動 Tomcat ,不讓 Tomcat 彈出新的 DOS 窗口,好讓我們看看 Tomcat 到底為什么沒有啟動。測試這個問題的簡單方法如下。

首先,請到 Tomcat 安裝目錄下的 bin 子目錄,把 Tomcat 的啟動 jar 文件 bootstrap.jar 重命名為 bootstrap_1.jar ,然后點(diǎn)擊 startup.bat 文件啟動,我們會看到一個小黑窗口閃了一下,但是 Tomcat 并沒有正常啟動,這是因為 startup.bat 執(zhí)行的是 Tomcat 的缺省命令 start ,該命令將在開始一個新的 DOS 窗口,并在其中啟動 Tomcat 。在這種情況下,我們就要借重于 run 命令了,我們改以下我們上面的 start_tomcat_version.bat 腳本,將 version 命令改為 run 命令,然后另存為 start_tomcat_run.bat ,該腳本全部內(nèi)容如下:

rem 請將 JAVA_HOME 環(huán)境變量修改到您的 JDK 安裝目錄
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09
rem 請將 CATALINA_HOME 環(huán)境變量修改到您的 Tomcat 安裝目錄
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
rem 開始調(diào)用 catalina.bat 文件
call %CATALINA_HOME%\bin\catalina.bat run

腳本的執(zhí)行結(jié)果如下:




請觀察上面窗口中的加亮部分,這部分向我們清楚地展示 Tomcat 的啟動錯誤,沒有找到 Tomcat 的啟動主類 Bootstrap 。這是因為我們?nèi)藶榈匕?/span> Tomcat 的啟動 jar 文件包從 bootstrap.jar 重命名為 bootstrap_1.jar ,這個 bootstrap.jar 文件既然不存在,那包含在這個文件的 Bootstrap.class 文件當(dāng)然也就找不到了。

現(xiàn)在,我們再回過頭看看這個 catalina.bat 腳本。為簡單起見,我們假定該腳本帶缺省命令行參數(shù) start ,看看 catalina 腳本的執(zhí)行流程。如果您對 catalina security 命令有興趣,請參考 Sun 公司的文檔 http://java./j2se/1.5.0/docs/guide/security/smPortGuide.html ;如果您對 jpda 命令有興趣,不妨瀏覽一下 http://java./javase/technologies/core/toolsapis/jpda/ 文檔。讓我們打開 catalina 腳本,首先請注意這個腳本第二行有一個 setlocal 的命令,這個命令表明 catalina 中的環(huán)境變量只在本腳本中起作用,對其它程序和命令不起作用,這就意味著這個腳本中的環(huán)境變量是局部變量,不是全局變量,不會影響其它腳本和操作系統(tǒng)環(huán)境。

然后我們會看到長達(dá) 34 行的注釋,這是優(yōu)秀程序員必須學(xué)會的基本功之一。這些注釋寫得非常簡潔明了,詳細(xì)說明了各個環(huán)境變量的意義和用途。緊接著,如果發(fā)現(xiàn) CATALINA_HOME 變量沒有定義,該腳本試圖設(shè)置該變量,這和 startup.bat 的第一節(jié)完全類似,在此不再贅述。然后該腳本調(diào)用 setclasspath.bat JAVA_HOME bin 目錄下尋找 java.exe javaw.exe 、 jdb.exe javac.exe 所在的路徑,并把這些 exe 文件的文件名和路徑賦值到相應(yīng)的環(huán)境變量 _RUNJAVA 、 _RUNJAVAW 、 _RUNJDB _RUNJAVAC 中。再接下來, catalina 腳本判斷是否定義有環(huán)境變量 CATALINA_BASE , CATALINA_TMPDIR ,如果定義了它們,就執(zhí)行相應(yīng)的操作。因為我們在此并沒有定義它們,所以執(zhí)行不到這些操作。然后, catalina 腳本將在本窗口內(nèi)打印出四個環(huán)境變量的值,這四個環(huán)境變量我們非常熟悉,一旦啟動 Tomcat ,我們必定能看到 CATALINA_BASE , CATALINA_HOME , CATALINA_TMPDIR JAVA_HOME 。然后 catalina 腳本根據(jù)其后跟的不同命令,拼湊出完整的 JAVA 命令行并執(zhí)行。下面是該腳本的詳細(xì)注釋:

Rem 獲得標(biāo)準(zhǔn)的環(huán)境變量,因為 setenv.bat 不存在,所以下面這兩句不執(zhí)行
rem Get standard environment variables
if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"

Rem 調(diào)用 setclasspath.bat 腳本,獲得標(biāo)準(zhǔn)的環(huán)境變量
rem Get standard Java environment variables
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"

rem 根據(jù)不同情況在 classpath 中加上不同的 jar
rem Add on extra jar files to CLASSPATH
if "%JSSE_HOME%" == "" goto noJsse
set CLASSPATH=%CLASSPATH%;%JSSE_HOME%\lib\jcert.jar;%JSSE_HOME%\lib\jnet.jar;%JSSE_HOME%\lib\jsse.jar

:noJsse

Rem 注意下面的這個 jar 文件是 tomcat 的啟動包
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar

rem 我們沒有定義 CATALINA_BASE ,下面這節(jié)不執(zhí)行
if not "%CATALINA_BASE%" == "" goto gotBase
set CATALINA_BASE=%CATALINA_HOME%

:gotBase


rem 我們沒有定義 CATALINA_ TMPDIR ,下面這節(jié)將忽略
if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set CATALINA_TMPDIR=%CATALINA_BASE%\temp

:gotTmpdir

Rem 打印 4 個我們非常熟悉的環(huán)境變量
rem ----- Execute The Requested Command ---------------------------------------
echo Using CATALINA_BASE:   %CATALINA_BASE%
echo Using CATALINA_HOME:   %CATALINA_HOME%
echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
echo Using JAVA_HOME:   %JAVA_HOME%

rem 定義一些環(huán)境變量
set _EXECJAVA=%_RUNJAVA%
rem 這是 Tomcat 啟動的主類
set MAINCLASS=org.apache.catalina.startup.Bootstrap
rem 這是 catalina 腳本的缺省命令 start
set ACTION=start
set SECURITY_POLICY_FILE=

set DEBUG_OPTS=
set JPDA=

rem 我們的第一個參數(shù)命令是 start ,下面這節(jié)將忽略不執(zhí)行
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
shift

:noJpda

rem 我們的第一個參數(shù)命令是 start ,所以程序?qū)⒆叩?/span> doStart 標(biāo)簽處執(zhí)行
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

rem 如果 catalina 后跟的命令不是 debug, run, start, stop version ,
rem 該腳本將打印出 catalina 的用法,然后結(jié)束。
Rem 詳情請見我們前面的測試腳本 start_tomcat_nothing.bat 及相應(yīng)的結(jié)果窗口
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

rem 執(zhí)行 debug 命令,我們的第一個參數(shù)命令是 start ,下面這節(jié)將忽略不執(zhí)行
:doDebug
shift
set _EXECJAVA=%_RUNJDB%
set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\jakarta-tomcat-catalina\catalina\src\share"

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

rem 執(zhí)行 start 命令
:doStart
Rem 將參數(shù)列表指針指向下一個參數(shù)
shift
rem 設(shè)置 Tomcat 啟動窗口的標(biāo)題,缺省值為 Tomcat
if not "%OS%" == "Windows_NT" goto noTitle
set _EXECJAVA=start "Tomcat" %_RUNJAVA%
goto gotTitle
:noTitle
set _EXECJAVA=start %_RUNJAVA%
:gotTitle


Rem 檢查第二個命令參數(shù)是否為 -security ,我們沒有第二個命令參數(shù),腳本將執(zhí)行至 execCmd 標(biāo)簽處
if not ""%1"" == ""-security"" goto execCmd
shift

echo Using Security Manager
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
goto execCmd

rem 執(zhí)行 stop 命令,我們的第一個參數(shù)命令是 start ,下面這節(jié)將忽略不執(zhí)行
:doStop
shift
set ACTION=stop
goto execCmd

rem 執(zhí)行 version 命令,我們的第一個參數(shù)命令是 start ,下面這節(jié)將忽略不執(zhí)行
:doVersion
%_EXECJAVA% -classpath "%CATALINA_HOME%\server\lib\catalina.jar" org.apache.catalina.util.ServerInfo
goto end


rem
執(zhí)行命令,首先看看命令行參數(shù)是否不只一個,我們本例只有一個 start 參數(shù),所以下面這節(jié)將不執(zhí)行

:execCmd
rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift

goto setArgs
:doneSetArgs

Rem 執(zhí)行 java 命令行
rem Execute Java with the applicable properties
rem 檢測 JPDA Security 變量,我們本例沒有定義他們,下面兩句將忽略
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity

rem 程序?qū)?zhí)行下面的 java 命令,在新窗口內(nèi)啟動 Tomcat
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

Rem catalina 至此結(jié)束,下面代碼我們將忽略。
goto end
:end

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    性感少妇无套内射在线视频| 亚洲精品有码中文字幕在线观看| 内射精子视频欧美一区二区| 欧美国产日韩变态另类在线看| av在线免费播放一区二区| 能在线看的视频你懂的| 手机在线不卡国产视频| 日韩成人免费性生活视频| 欧美日韩精品综合一区| 女人精品内射国产99| 久久人人爽人人爽大片av| 欧美国产日产综合精品| 国产精品超碰在线观看| 少妇熟女亚洲色图av天堂| 日韩精品综合福利在线观看| 五月婷婷缴情七月丁香| 在线观看中文字幕91| 91亚洲精品国产一区| 免费观看潮喷到高潮大叫| 美女被啪的视频在线观看| 久久国产亚洲精品赲碰热| 人妻中文一区二区三区| 丝袜美女诱惑在线观看| 日韩黄片大全免费在线看| 国产精品一区二区三区日韩av| av中文字幕一区二区三区在线| 国产午夜精品福利免费不| 麻豆精品视频一二三区| 精品人妻一区二区三区免费看| 日韩一本不卡在线观看| 91欧美激情在线视频| 麻豆视频传媒入口在线看| 国产一级二级三级观看| 日韩性生活视频免费在线观看 | 亚洲天堂久久精品成人| 太香蕉久久国产精品视频| 中文字幕日韩欧美理伦片| 麻豆视传媒短视频免费观看| 日本不卡在线视频你懂的| 欧洲日韩精品一区二区三区| 国产精品免费视频视频|