在Tomcat中部署Java Web應用程序有兩種方式:靜態部署和動態部署。在下文中$CATALINA_HOME指的是Tomcat根目錄。
1、靜態部署
靜態部署指的是咱們在服務器啓動以前部署咱們的程序,只有當服務器啓動以後,咱們的Web應用程序才能訪問。如下3中方式均可以部署:
一、將PetWeb目錄拷貝到$CATALINA_HOME\webapps下,而後啓動服務器就能夠了。這種方式比較簡單,可是web應用程序必須在webapps目錄下。訪問地址以下:
http://localhost:8080/PetWeb/
二、這種方式能夠沒必要將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/
三、這種方式和第二種方式差很少,可是不是在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包,而後在部署在服務器上。打包請參考以下步驟:
一、打開命令提示符(Start-->Run-->cmd)
二、設置jdk環境變量
三、在命令提示符中進入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"/>
2、動態部署
動態部署是指能夠在服務器啓動以後部署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開始。最後從新啓動服務器再訪問你程序,應該可以看到和上次相同的效果