tomcat啓動腳本分析

tomcat啓動腳本分析一

2008-05-12 08:59

Tomcat是應用頗廣的Servlet和JSP的容器,可以說幾乎每個學習JSP的人都接觸過它。在實際開發環境中,它還可以作爲輕巧靈便的應用服務器用來調試和部署。在Tomcat上開發的Servlet和JSP程序,可以非常方便地部署到Weblogic及Websphere等生產服務器上去。有些情況下,它還可以和ApacheWeb Server配合使用,作爲小型企業的Web Application Server。本文以Tomcat5.0.28爲例,討論一下Tomcat的啓動過程及常見問題。大家都知道,Tomcat最普遍的啓動方法就是在DOS命令行窗口中執行Tomcat的bin目錄下的startup.bat文件(雙擊該文件即可啓動)。 
1. startup.bat腳本解析下面我們首先來看看startup.bat腳本是如何啓動Tomcat的。Startup腳本非常明瞭,它的主要任務就是先設置CATALINA_HOME的環境變量,讓該環境變量指向Tomcat的安裝目錄;然後在安裝目錄的bin子目錄下找catalina.bat文件,如果找不到,就打印出錯誤信息並退出,如果在bin目錄下找到catalina.bat文件,就準備執行該文件。不過,在執行該文件之前,startup腳本還做了一件工作,那就是尋找參數。startup腳本可以帶多個參數,在Java主類中,第一個參數爲args[0],而在MS-DOS腳本中,第一個參數可以通過”%1”得到,如果您想要得到DOS腳本中得到第二個參數,調用”%2”。但是,在腳本參數數目未知的情況下,我們就只能通過goto循環調用shift命令來獲得腳本的所有參數,下面這個簡單的實驗腳本有助於我們理解如何使用shift命令。 @echo off 
echo Print parameters by %%1 andshift loop 
:loopStart 
if""%1""=="""" goto loopEnd 
echo Paramter is %1 
shift 
goto loopStart 
:loopEnd 
如果把上面的腳本保存成test.bat並在DOS中執行該腳本,執行結果如下。 
下面就是Startup.bat腳本的詳細註釋,如果想要在DOS腳本中註釋一行,前面加上rem即可,這相當於Java的雙斜槓(//)註釋,下面程序中,凡是以REM開頭然後接着中文的行,都是筆者加上的註釋,以幫助讀者理解該腳本。@echo off 
if "%OS%" == "Windows_NT" setlocal 
rem ---------------------------------------------------------------------------
rem Start script for the CATALINA Server 
rem 
rem $Id: startup.bat,v 1.6 2004/05/27 18:25:11 yoavs Exp $ 
rem ---------------------------------------------------------------------------rem 首先定義一個變量CURRENT_DIR,然後把當前目錄作爲一個字符串賦給它 
rem Guess CATALINA_HOME if not defined 
set CURRENT_DIR=%cd% rem 如果CATALINA_HOME變量已經賦值,程序轉到gotHome行繼續 
if not "%CATALINA_HOME%" == "" goto gotHome rem 把當前目錄的值作爲字符串賦給CATALINA_HOME變量 
set CATALINA_HOME=%CURRENT_DIR% rem 如果當前目錄的bin子目錄下發現catalina.bat文件,程序轉到okHome行繼續 
rem 否則執行下一行“cd..”。 
Rem 因爲缺省情況下當前目錄就是bin目錄,所以缺省情況下程序不轉入okHome行 
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome rem 回上層目錄 
cd .. rem 把當前目錄的上層目錄作爲字符串賦給再次CATALINA_HOME變量,覆蓋第一次的賦值 
set CATALINA_HOME=%cd% rem 重新回到當前目錄 
cd %CURRENT_DIR% :gotHome rem 如果在當前目錄的父目錄的bin子文件夾下發現catalina.bat文件,程序轉到okHome行繼續 
rem 否則程序打印兩行錯誤信息,然後退出 
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 設置一個變量,存儲catalina.bat的完整路徑 
set EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat rem 再次檢查catalina.bat是否存在,如果不存在,打印兩行錯誤信息,退出 
rem Check that target executable exists 
if exist "%EXECUTABLE%" goto okExec 
echo Cannot find %EXECUTABLE% 
echo This file is needed to run this program 
goto end 
:okExec rem 檢查腳本是否帶參數,如果發現參數,把第一個參數賦值給 CMD_LINE_ARGS變量 
rem 如果腳本帶有多個參數,程序設置了一個循環setArgs, 
rem 不斷把所帶的參數加到CMD_LINE_ARGS變量中 
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 執行catalina.bat腳本,該腳本的第一個參數爲start,後面的參數是從本腳本中傳入的 
call "%EXECUTABLE%" start %CMD_LINE_ARGS% :end 那麼讀者也許要問,問什麼要通過startup腳本來調用catalina腳本,直接一個腳本不更方便嗎?細心的讀者或許會發現,在缺省情況下,startup腳本只能放在兩個位置,一是Tomcat的安裝目錄,一個就是Tomcat安裝目錄的bin子目錄。這是什麼意思呢?如果Tomcat安裝目錄是C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28,那麼startup腳本只能放在C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28\目錄或者C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28\bin目錄下才能運行,如果拷貝startup文件到其它目錄,我們就會看到下面的錯誤(以Tomcat運行在C:\carl目錄下爲例): C:\carl>startup 
CATALINA_HOME C:\ 
The CATALINA_HOME environment variable is not defined correctly 
This environment variable is needed to run this program 
那麼,如果我們想讓Tomcat在桌面上能成功啓動,那麼該怎麼辦呢?當然,我們首先想到的是爲startup創建一個快捷方式,然後拷貝該快捷方式到桌面,這是一種辦法。另一種辦法就是修改startup.bat文件,在startup.bat腳本的第八行處添上一句腳本,讓 CATALINA_HOME變量指向用戶Tomcat的安裝路徑,這樣,startup.bat就可以拷貝到機器的任何目錄執行。這個startup.bat腳本就是提供給使用者用來修改的,我們可以在其中設置JAVA_HOME,CATALINA_HOME等環境變量,但我們並不需要深入到較爲複雜的catalina.bat腳本中,這正是startup.bat腳本的真正用意所在。我們知道,軟件設計模式中有一個重要的原則就是開閉原則,即我們可以允許別人擴展我們的程序,但在程序發佈後,我們拒絕任何修改,因爲修改會產生新的Bug,使得我們已經Bug-free的程序又要重新測試。開閉原則是面向對象世界中的一個非常重要的原則,我們可以把這個原則從Java類擴展至源代碼級別。startup腳本就是要求用戶不要修改catalina.bat腳本,這是符合軟件設計思想的。我們如果想要徹底貫徹這個重要的軟件設計原則,可以寫一個新腳本tomcat.bat,腳本內容大致如下: set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09 
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28 
call %CATALINA_HOME%\bin\startup.bat 這個tomcat.bat文件可以存放在任何目錄並能執行,並且不需要修改tomcat自帶的任何腳本及其它環境變量,這就徹底貫徹了開閉原則。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章