Tomcat啟動分析(我們為什麼要配置CATALINA_HOME環境變數)

來源:互聯網
上載者:User

原文地址:http://www.cnblogs.com/heshan664754022/archive/2013/03/27/2984357.html


用文本編輯工具開啟用於啟動Tomcat的批次檔startup.bat,仔細閱讀。在這個檔案中,首先判斷CATALINA_HOME環境變數是否為空白,如果為空白,就將目前的目錄設為CATALINA_HOME的值。接著判斷目前的目錄下是否存在bin\catalina.bat,如果檔案不存在,將目前的目錄的父目錄設為CATALINA_HOME的值。根據筆者機器上Tomcat安裝目錄的階層,最後CATALINA_HOME的值被設為Tomcat的安裝目錄。如果環境變數CATALINA_HOME已經存在,則通過這個環境變數調用bin目錄下的“catalina.bat start”命令。通過這段分析,我們瞭解到兩個資訊,一是Tomcat啟動時,需要尋找CATALINA_HOME這個環境變數,如果在Tomcat的bin目錄下調用startup.bat,Tomcat會自動並正確設定CATALINA_HOME;二是執行startup.bat命令,實際上執行的是“catalina.bat start”命令。

 

如果我們不是在Tomcat的bin目錄作為目前的目錄時調用startup.bat,就會出現如下圖所示的錯誤資訊(在bin目錄的父目錄下調用除外)。

 

圖    在其他目錄下啟動Tomcat出錯

如果要想在任意目錄下都能啟動Tomcat,就需要設定CATALINA_HOME環境變數,你可以將CATALINA_HOME添加到Windows XP系統的環境變數中,其值就是Tomcat的安裝目錄。在筆者的機器上,Tomcat的安裝目錄是D:\apache-tomcat-6.0.36-windows-x86\apache-tomcat-6.0.36。添加CATALINA_HOME環境變數的過程和前述添加JAVA_HOME環境變數的過程是一樣的。如果你不想在系統的環境變數中添加,也可以直接在startup.bat檔案中進行設定。下面是在startup.bat檔案中設定CATALINA_HOME後的檔案片段:

 

 

rem $Id: startup.bat 908749 2010-02-10 23:26:42Z markt $
rem ---------------------------------------------------------------------------

set CATALINA_HOME=D:\apache-tomcat-6.0.36-windows-x86\apache-tomcat-6.0.36

rem Guess CATALINA_HOME if not defined
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 ..

...

注意以粗體顯示的這句代碼的作用就是設定CATALINA_HOME環境變數,在它的下面是判斷CATALINA_HOME是否為空白的語句。如果找不準位置,乾脆將設定CATALINA_HOME環境變數的這句代碼放到檔案的第一行。JAVA_HOME環境變數也可以採用同樣的方式進行設定。不過,如果要在其他目錄下利用shutdown.bat來關閉Tomcat伺服器,則需要在shutdown.bat檔案中設定CATALINA_HOME和JAVA_HOME這兩個環境變數,設定變數的位置和startup.bat檔案一樣,都是在判斷CATALINA_HOME是否為空白之前。當然,為了一勞永逸,避免重裝Tomcat後還要進行設定(需要是同一版本的Tomcat安裝在同一位置),我們最好還是將CATALINA_HOME和JAVA_HOME這兩個環境變數添加到Windows XP系統的環境變數中。

 

有的讀者可能會對Tomcat安裝目錄的環境變數的名字是CATALINA_HOME而感到奇怪,按照其他環境變數的設定來看,JAVA_HOME表示JDK的安裝目錄,那麼應該用TOMCAT_HOME來表示Tomcat的安裝目錄,可為什麼要使用CATALINA_HOME呢。實際上,在Tomcat 4以前,用的就是TOMCAT_HOME來表示Tomcat的安裝目錄,在Tomcat 4以後,採用了新的Servlet容器Catalina,所以環境變數的名字也改為了CATALINA_HOME。

在Windows系統下環境變數的名字是與大小寫無關的,也就是說,JAVA_HOME和java_home是一樣的。

 

瞭解了startup.bat檔案以後,我們再來看看真正負責啟動Tomcat伺服器的catalina.bat檔案。通過分析catalina.bat檔案,我們發現它還調用了一個檔案setclasspath.bat。在setclasspath.bat檔案中,它檢查JAVA_HOME環境變數是否存在,並通過JAVA_HOME環境變數,找到java.exe,用於啟動Tomcat。在這個檔案中,還設定了其他的一些變數,代表調用Java的標準命令,有興趣的讀者可以自行分析一下這個檔案。在執行完setclasspath.bat之後,catalina.bat剩下的部分就開始了Tomcat伺服器的啟動進程。

 

直接執行catalina.bat時,需要帶上命令列的參數。讀者可以在命令提示字元視窗下,執行catalina.bat,就會列印出catalina.bat命令的各種參數及其含義,如下圖所示。

(點擊查看大圖)圖     catalina.bat的各參數資訊

 

其中常用的參數是start、run和stop。參數start表示在一個單獨的視窗中啟動Tomcat伺服器,參數run表示在當前視窗中啟動Tomcat伺服器;參數stop表示關閉Tomcat伺服器。我們執行startup.bat,實際上執行的就是“catalina.bat start”命令;執行shutdown.bat,實際上執行的是“catalina.bat stop”命令。“catalina.bat run”命令有時候是非常有用的,特別是當我們需要查看Tomcat的出錯資訊時。

 

在開發JSP程式時,經常會碰到自己機器上的8080連接埠號碼被別的應用程式佔用,或者在配置server.xml時出現錯誤,當通過startup.bat(相當於執行“catalina.bat start”)啟動Tomcat伺服器時,如果啟動過程中出現嚴重錯誤,由於是在單獨的視窗中啟動Tomcat伺服器,所以一旦啟動失敗,命令提示字元視窗就自動關閉了,程式運行中輸出的出錯資訊也隨之消失,而且沒有任何的日誌資訊,這就使得我們沒有辦法找出錯誤原因。當出現錯誤時,我們可以換成“catalina.bat run”命令再次啟動,一旦啟動失敗,僅僅是Tomcat伺服器異常終止,但是在當前的命令提示字元視窗下仍然保留了啟動時的出錯資訊,這樣我們就可以尋找啟動失敗的原因了。

 

     本文轉自孫鑫的《Servlet/JSP深入詳解:基於Tomcat的Web開發》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.