在Tomcat中部署Java Web應用程序有兩種方式:靜態部署和動態部署。
在下文中$CATALINA_HOME指的是Tomcat根目錄。
一、靜態部署
靜態部署指的是我們在服務器啓動之前部署我們的程序,只有當服務器啓動之後,我們的Web應用程序才能訪問。以下3中方式都可以部署:
1、將PetWeb目錄拷貝到$CATALINA_HOME\webapps下,然後啓動服務器就可以了。這種方式比較簡單,但是web應用程序必須在webapps目錄下。訪問地址如下:
http://localhost:8080/PetWeb/
2、這種方式可以不必將PetWeb目錄拷貝到webapps下,直接在F:\部署。方法如下,更改$CATALINA_HOME\conf\server.xml文件,在<host>標籤內添加<Context>標籤,內容如下:
<Context docBase="F:/PetWeb" reloadable="false" path="/Pet"/>
其中reloadable="false"表示當應用程序中的內容發生更改之後服務器不會自動加載,這個屬性在開發階段通常都設爲true,方便開發,在發佈階段應該設置爲false,提高應用程序的訪問速度。docBase爲路徑,可以使用絕對路徑,也可以使用相對路徑,相對路徑相對於webapps。path屬性的值是訪問時的根地址。訪問地址如下:http://localhost:8080/Pet/
3、這種方式和第二種方式差不多,但是不是在Server.xml文件中添加Context標籤,而是在$CATALINA_HOME\conf\Catalina\localhost中添加一個xml文件,如Pet.xml,內容如下:
<Context docBase="F:/PetWeb" reloadable="false" />大家可能發現和第二種方式差不多,但是缺少了path屬性,這種方式服務器會使用.xml的名字作爲path屬性的值。訪問地址如下:http://localhost:8080/Pet/
我們剛纔是將PetWeb文件夾部署在了服務器中,我們知道可以將Web應用程序的內容打成.war包,然後在部署在服務器上。打包請參考如下步驟:
1、打開命令提示符(Start-->Run-->cmd)
2、設置jdk環境變量
3、在命令提示符中進入F:\PetWeb文件後,鍵入如下命令:
jar ..\Pet.war *.* 這樣在F:\下應該有Pet.war文件。其中..表示當前目錄的父目錄。
部署Pet.war文件非常簡單,將剛纔有docBase="F:\PetWeb"更改爲docBase="F:\Pet.war"或者直接將其拷貝到webapps下也可以。重新啓動服務器就可以將Pet.war部署爲一個Web應用程序了。如果你夠細心的話你會發現,服務器將Pet.war文件解開,並且在webapps下面又生成了一個Pet文件夾,然後把Pet.war的內容拷貝到裏面去了。我們可以通過以下方式取消自動解壓縮,配置方式如下:
<Context docBase="F:/PetWeb" reloadable="false" unpackWAR="false"/>
二、動態部署
動態部署是指可以在服務器啓動之後部署web應用程序,而不用重新啓動服務器。動態部署要用到服務器提供的manager.war文件,如果在$CATALINA_HOME\webapps\下沒有該文件,你必須去重新下載tomcat,否則不能完成以下的功能。要想使用該管理程序必須首先編輯$CATALINA_HOME\conf\tomcat-users.xml文件,
上文且說到tomcat-users.xml文件,這個文件中的內容是不依賴於任何一個web應用程序,所以在任何一個web程序中都可以使用,如果這些用戶和角色只對你的應用起作用,那麼你完全可以放置在你自己的應用程序中,比如WEB-INF中.下面我們將上次加入到tomcat-users.xml文件中的內容,加入到我們在WEB-INF下新建的myUser.xml文件中,注意此文件應該是以<tomcat-users>爲根目錄,如下所示:
<tomcat-users>
<!--定義角色-->
<role rolename="suozhangshi"/>
<role rolename="guahaoshi"/>
<role rolename="danganshi"/>
<!--定義用戶,並加入到角色中-->
<user username="gua1" password="gua1" roles="guahaoshi"/>
<user username="gua2" password="gua2" roles="guahaoshi"/>
<user username="dang1" password="dang1" roles="danganshi"/>
<user username="dang2" password="dang2" roles="danganshi"/>
<user username="suo1" password="suo1" roles="suozhangshi"/>
<user username="suo2" password="suo2" roles="suozhangshi"/>
</tomcat-users>
這個文件已經建立好了,那麼怎麼告訴Tomcat加載這個文件呢?我們通過下面這一種方式,在你的Web應用程序中的META-INF文件夾中加入Context.xml 文件,這樣當此應用程序部署的時候,就會加載該文件的內容,內容如下:
<Context>
<Realm className="org.apache.catalina.realm.MemoryRealm"
pathname="webapps/SecurityWeb/WEB-INF/myUsers.xml" />
</Context>
Realm標籤中className屬性定義了使用MemoryRealm類從pathname處加載xml文件。。還要注意這裏的pathname它是以相對Tomcat根目錄的,所以上文件路徑應該從webapps開始。最後重新啓動服務器再訪問你程序,應該能夠看到和上次相同的效果