本文基本轉自:http://www.blogjava.net/ocean07000814/articles/331694.html
主要講的是在 Tomcat 中部署 Java Web 應用程式。因為重點是如何部署,所以暫且先不介紹怎樣開發 Web 應用程式和怎樣啟動 Tomcat 伺服器,也不考慮使用的什麼開發工具,總之在練習本文所說的例子之前,你應該有一個 Java Web 應用程式。本文假定 Web 應用程式的根目錄為 HelloProject 。而且存放在 C:\Documents and Settings\Administrator\workspace 下, 目錄結構
下文中 $CATALINA_HOME 指的是 Tomcat 根目錄。
在 Tomcat 中部署 Java Web 應用程式有兩種方式:靜態部署和動態部署。
一、靜態部署
靜態部署指的是我們在伺服器啟動之前部署我們的程式,只有當伺服器啟動之後,我們的Web應用程式才能訪問。以下3中方式都可以部署:
1、將 HelloProject 目錄拷貝到 $CATALINA_HOME\webapps 下,然後啟動伺服器就可以了。這種方式 是最簡單的一種方式,訪問地址如下:http://localhost:8080/HelloProject
2、這種方式可以不必將 HelloProject 目錄拷貝到 webapps 下,直接在 C:\Documents and Settings\Administrator\workspace 部署。
方法如下,更改 $CATALINA_HOME\conf\server.xml 檔案,在 <host> 標籤內添加 <Context> 標籤,內容如下:
<Context docBase="C:\Documents and Settings\Administrator\workspace\HelloProject" reloadable="false" path="/HP"/>
其中 reloadable="false" 表示當應用程式中的內容發生更改之後伺服器不會自動載入,這個屬性在開發階段通常都設為 true,方便開發,在發布階段應該設定為 false,提高應用程式的訪問速度。
docBase 為項目存放的路徑,可以使用絕對路徑,也可以使用相對路徑,相對路徑相對於 webapps。path 屬性的值是訪問時的根地址。訪問地址如下:http://localhost:8080/HP
說明:如果 HelloProject 下有 WebContent 目錄,
那麼下邊的配置都可以,且訪問路徑要對應
<Context docBase="C:\Documents and Settings\Administrator\workspace\HelloProject" reloadable="false" path="/HP"/> 訪問地址:http://localhost:8080/HP/WebContent
<Context docBase="C:\Documents and Settings\Administrator\workspace\HelloProject\WebContent" reloadable="false" path="/HPT"/> 訪問地址:http://localhost:8080/HPT
<Context docBase="C:\Documents and Settings\Administrator\workspace\HelloProject" path="/HelloProject" reloadable="true" /> 訪問地址:http://localhost:8080/HelloProject
在 <Content docBase=”..”path=”…” workDir=”…” /> 中 workDir 是部署後 jsp 發布的目錄,可以自己隨便指定,或不指定。
3、這種方式和第二種方式差不多,但是不是在 Server.xml 檔案中添加 Context 標籤,而是在 $CATALINA_HOME\conf\Catalina\localhost 中添加一個 xml 檔案,
如 HP.xml,內容如下:<Context docBase="C:\Documents and Settings\Administrator\workspace\HelloProject" reloadable="false" /> 大家可能發現和第二種方式差不多,
但是缺少了 path 屬性,這種方式伺服器會使用 .xml 的名字作為 path 屬性的值。訪問地址如下:http://localhost:8080/HP
在看 *.war 的講解和部署
我們剛才是將 HelloProject 檔案夾部署在了伺服器中,我們知道可以將 Web 應用程式的內容打成 *.war 包,然後在部署在伺服器上。
打包請參考如下步驟:
1、開啟命令提示字元(Start –> Run –> cmd)
2、設定 jdk 環境變數 (如果是設定好的,可以省略此步)
3、在命令提示字元中進入 C:\Documents and Settings\Administrator\workspace\HelloProject 檔案後,鍵入如下命令: jar cvf PHT.war */.
這樣在目前的目錄下該有 PHT.war 檔案。其中 .. 表示目前的目錄的父目錄。命令列和目錄結構
部署 PHT.war 檔案非常簡單,
(1) 將剛才有 docBase="C:\Documents and Settings\Administrator\workspace\HelloProject" 更改為docBase="C:\Documents and Settings\Administrator\workspace\HelloProject\PHT.war"
(2) 或者直接將其拷貝到 webapps下也可以。
重新啟動伺服器就可以將 PHT.war 部署為一個 Web 應用程式了。
如果你夠細心的話你會發現,伺服器將 PHT.war 檔案解開,並且在 webapps 下面又產生了一個 PHT 檔案夾,然後把 PHT.war 的內容拷貝到裡面去了。
我們可以通過以下方式取消自動解包,配置方式如下:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 將其中的 unpackWARs=”true” 改成 false 就 ok 了 –>
<Context …. />
</Host>
二、動態部署
動態部署是指可以在伺服器啟動之後部署 web 應用程式,而不用重新啟動伺服器。
動態部署要用到伺服器提供的 manager.war 檔案,如果在 $CATALINA_HOME\webapps\ 下沒有該檔案,你必須去重新下載 tomcat,否則不能完成以下的功能。
要想使用該管理程式必須首先編輯 $CATALINA_HOME\conf\tomcat-users.xml 檔案(關於這個檔案的更多內容,請參考Java Web應用程式的安全模型二),
內容如下:
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/><!-- 這個是自己加的,tomcat7 為 manager-gui -->
<user username="admin" password="admin" roles="manager"/><!-- 這個是自己加的,tomcat7 為 manager-gui -->
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>
然後在瀏覽器中鍵入如下地址:http://localhost:8080/ 點擊 Tomcat Manager 連結,提示輸入使用者名稱和密碼,本文都是 admin,然後可以看到以下頁面:
在 ------>
1、Context Path(required):中輸入 /HP
2、XML Configration file URL 中要指定一個 *.xml 檔案,比如我們在 D:\ 下建立一個 PH.xml 檔案,內容如下: <Context reloadable="false" /> docBase不用寫了,因為在下一個文字框中填入。
或者更簡單點,這個文字框什麼都不填。
3、在 WAR or Directory URL:中鍵入 C:\Documents and Settings\Administrator\workspace\HelloProject 或者 C:\Documents and Settings\Administrator\workspace\HelloProject\PHT.war 都可以,然後點擊 Deploy 按鈕,看看上面是不是已經看到了你 web 應用程式,名字就是你 Context Path(required):中的名字。
4、如果你部署 *.war 檔案還有更加簡單的方式,下面還有個 Select WAR file upload 點擊瀏覽選擇 *.war 檔案,然後點擊 Deploy 也可以。