當(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 種。 具體解釋如下:
看完上面的解釋,我們對 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
|
|
來自: 丶十月丶 > 《工具相關(guān)》