精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
catalina.bat腳本解析
當startup腳本完成環境變量的設置后,就開始調用catalina.bat腳本來啟動Tomcat。Catalina腳本的主要任務是根據環境變量和不同的命令行參數,拼湊出完整的java命令行,調用Tomcat的主類org.apache.catalina.startup.Bootstrap來啟動Tomcat。我們先不解析該腳本,而是寫一個簡單的測試腳本來調用這個程序,看看測試結果,從而理解該腳本的調用方法。
測試腳本如下:
rem 請將JAVA_HOME環境變量修改到您的JDK安裝目錄
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09
rem 請將CATALINA_HOME環境變量修改到您的Tomcat安裝目錄
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
rem 開始調用catalina.bat文件
call %CATALINA_HOME%\bin\catalina.bat
我們把上面的腳本保存為start_tomcat_nothing.bat文件,然后在MS-DOS下執行,我們將看到如下的執行結果。
這個腳本并沒有成功啟動Tomcat,但是它給我們提供調用catalina.bat腳本的方法,請閱讀上面窗口中的加亮部分。Catalina.bat的調用方法為 catalina后面加上具體命令參數,這個命令參數有以下9種。
具體解釋如下:
debug在調試器中啟動Tomcat
debug -security帶有安全管理器的調試器中,調用catalina腳本來啟動Tomcat
jpda start調用catalina腳本,在JPDA調試器中啟動Tomcat
run 在當前窗口內調用catalina腳本來啟動Tomcat(不切換窗口)
run -security 帶有安全管理的情況下,在當前窗口內調用catalina腳本來啟動Tomcat(不切換窗口)
start 開始一個新的DOS窗口,并在其中啟動Tomcat(切換至新窗口)
start -security帶有安全管理的情況下,在新的DOS窗口中啟動Tomcat(切換至新窗口)
stopcatalina腳本執行停止命令來關閉Tomcat
version 您使用的Tomcat版本
看完上面的解釋,我們對Tomcat的啟動參數有所了解。好,咱們寫一個最簡單的腳本來測試一下,拷貝剛才start_tomcat_nothing.bat腳本,將它重新命名為start_tomcat_version.bat,該腳本的內容和start_tomcat_nothing.bat腳本幾乎一致,只是最后一行多加了一個version命令,start_tomcat_version.bat腳本全部內容如下:
rem 請將JAVA_HOME環境變量修改到您的JDK安裝目錄
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09
rem 請將CATALINA_HOME環境變量修改到您的Tomcat安裝目錄
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
rem 開始調用catalina.bat文件
call %CATALINA_HOME%\bin\catalina.bat version
我們可以在DOS下觀察該腳本的執行結果。
該腳本順利執行,執行的結果告訴我們當前Tomcat的版本號為5.0.28。有興趣的讀者朋友可以試試其它的8個命令參數,這些命令參數有時對我們非常有用。舉例來說,有時候我們正常啟動Tomcat時,Tomcat彈出一個DOS窗口,但是瞬間消失,我們看不出到底哪里出了問題,也無任何啟動日志可看。在這種情況下,我們可以使用run命令在同一個窗口內啟動Tomcat,不讓Tomcat彈出新的DOS窗口,好讓我們看看Tomcat到底為什么沒有啟動。測試這個問題的簡單方法如下。
首先,請到Tomcat安裝目錄下的bin子目錄,把Tomcat的啟動jar文件bootstrap.jar重命名為bootstrap_1.jar,然后點擊startup.bat文件啟動,我們會看到一個小黑窗口閃了一下,但是Tomcat并沒有正常啟動,這是因為startup.bat執行的是Tomcat的缺省命令start,該命令將在開始一個新的DOS窗口,并在其中啟動Tomcat。在這種情況下,我們就要借重于run命令了,我們改以下我們上面的start_tomcat_version.bat腳本,將version命令改為run命令,然后另存為start_tomcat_run.bat,該腳本全部內容如下:
rem 請將JAVA_HOME環境變量修改到您的JDK安裝目錄
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09
rem 請將CATALINA_HOME環境變量修改到您的Tomcat安裝目錄
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
rem 開始調用catalina.bat文件
call %CATALINA_HOME%\bin\catalina.bat run
腳本的執行結果如下:
請觀察上面窗口中的加亮部分,這部分向我們清楚地展示Tomcat的啟動錯誤,沒有找到Tomcat的啟動主類Bootstrap。這是因為我們人為地把Tomcat的啟動jar文件包從bootstrap.jar重命名為bootstrap_1.jar,這個bootstrap.jar文件既然不存在,那包含在這個文件的Bootstrap.class文件當然也就找不到了。
現在,我們再回過頭看看這個catalina.bat腳本。為簡單起見,我們假定該腳本帶缺省命令行參數start,看看catalina腳本的執行流程。如果您對catalina的security命令有興趣,請參考Sun公司的文檔http://java.sun.com/j2se/1.5.0/docs/guide/security/smPortGuide.html;如果您對jpda命令有興趣,不妨瀏覽一下http://java.sun.com/javase/technologies/core/toolsapis/jpda/ 文檔。讓我們打開catalina腳本,首先請注意這個腳本第二行有一個setlocal的命令,這個命令表明catalina中的環境變量只在本腳本中起作用,對其它程序和命令不起作用,這就意味著這個腳本中的環境變量是局部變量,不是全局變量,不會影響其它腳本和操作系統環境。
然后我們會看到長達34行的注釋,這是優秀程序員必須學會的基本功之一。這些注釋寫得非常簡潔明了,詳細說明了各個環境變量的意義和用途。緊接著,如果發現CATALINA_HOME變量沒有定義,該腳本試圖設置該變量,這和startup.bat的第一節完全類似,在此不再贅述。然后該腳本調用setclasspath.bat到JAVA_HOME的bin目錄下尋找java.exe、javaw.exe、jdb.exe和javac.exe所在的路徑,并把這些exe文件的文件名和路徑賦值到相應的環境變量_RUNJAVA、_RUNJAVAW、_RUNJDB和_RUNJAVAC中。再接下來,catalina腳本判斷是否定義有環境變量CATALINA_BASE,CATALINA_TMPDIR,如果定義了它們,就執行相應的操作。因為我們在此并沒有定義它們,所以執行不到這些操作。然后,catalina腳本將在本窗口內打印出四個環境變量的值,這四個環境變量我們非常熟悉,一旦啟動Tomcat,我們必定能看到CATALINA_BASE,CATALINA_HOME,CATALINA_TMPDIR和JAVA_HOME。然后catalina腳本根據其后跟的不同命令,拼湊出完整的JAVA命令行并執行。下面是該腳本的詳細注釋:
Rem 獲得標準的環境變量,因為setenv.bat不存在,所以下面這兩句不執行
rem Get standard environment variables
if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
Rem 調用setclasspath.bat腳本,獲得標準的環境變量
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根據不同情況在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,下面這節不執行
if not "%CATALINA_BASE%" == "" goto gotBase
set CATALINA_BASE=%CATALINA_HOME%
:gotBase
rem 我們沒有定義CATALINA_ TMPDIR,下面這節將忽略
if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set CATALINA_TMPDIR=%CATALINA_BASE%\temp
:gotTmpdir
Rem 打印4個我們非常熟悉的環境變量
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 定義一些環境變量
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 我們的第一個參數命令是start,下面這節將忽略不執行
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 我們的第一個參數命令是start,所以程序將走到doStart標簽處執行
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的用法,然后結束。
Rem 詳情請見我們前面的測試腳本start_tomcat_nothing.bat及相應的結果窗口
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 執行debug命令,我們的第一個參數命令是start,下面這節將忽略不執行
: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 執行start命令
:doStart
Rem 將參數列表指針指向下一個參數
shift
rem 設置Tomcat啟動窗口的標題,缺省值為Tomcat
if not "%OS%" == "Windows_NT" goto noTitle
set _EXECJAVA=start "Tomcat" %_RUNJAVA%
goto gotTitle
:noTitle
set _EXECJAVA=start %_RUNJAVA%
:gotTitle
Rem 檢查第二個命令參數是否為-security,我們沒有第二個命令參數,腳本將執行至execCmd標簽處
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
goto execCmd
rem 執行stop命令,我們的第一個參數命令是start,下面這節將忽略不執行
:doStop
shift
set ACTION=stop
goto execCmd
rem 執行version命令,我們的第一個參數命令是start,下面這節將忽略不執行
:doVersion
%_EXECJAVA% -classpath "%CATALINA_HOME%\server\lib\catalina.jar" org.apache.catalina.util.ServerInfo
goto end
rem 執行命令,首先看看命令行參數是否不只一個,我們本例只有一個start參數,所以下面這節將不執行
: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 執行java命令行
rem Execute Java with the applicable properties
rem 檢測JPDA和Security變量,我們本例沒有定義他們,下面兩句將忽略
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
rem 程序將執行下面的java命令,在新窗口內啟動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至此結束,下面代碼我們將忽略。
goto end
:end
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
查看tomcat啟動文件都干點啥
分析 Tomcat catalina.bat 腳本
tomcat一閃而過的問題
Eclipse遠程調試Tomcat
tomcat啟動startup.bat一閃而過
tomcat注冊成windows服務 | micmiu
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 望都县| 禹州市| 昌宁县| 浦东新区| 历史| 河东区| 徐闻县| 红桥区| 栾川县| 封开县| 社会| 巢湖市| 马关县| 灵石县| 盐源县| 定边县| 南城县| 南溪县| 治多县| 永丰县| 秀山| 台南县| 丽江市| 东乌| 平泉县| 吉水县| 浮梁县| 马尔康县| 日喀则市| 手游| 汾西县| 铁力市| 临泉县| 郧西县| 上蔡县| 清镇市| 宜章县| 定边县| 息烽县| 如东县| 诏安县|