Tomcat與Java Web開發(fā)技術(shù)詳解連載之三
作者:孫衛(wèi)琴 發(fā)文時間:2005.06.07
2.2.8 創(chuàng)建并發(fā)布WAR文件
Tomcat既可以運行采用開放式目錄結(jié)構(gòu)的Web應(yīng)用,也可以運行WAR文件。在本書配套光盤的sourcecode/chapter2/helloapp目錄下提供了所有源文件,只要把整個helloapp目錄拷貝到/webapps目錄下,即可運行開放式目錄結(jié)構(gòu)的helloapp應(yīng)用。在Web應(yīng)用的開發(fā)階段,為了便于調(diào)試,通常采用開放式的目錄結(jié)構(gòu)來發(fā)布Web應(yīng)用,這樣可以方便地更新或替換文件。如果開發(fā)完畢,進入產(chǎn)品發(fā)布階段,應(yīng)該將整個Web應(yīng)用打包為WAR文件,再進行發(fā)布。
在本例中,按如下步驟發(fā)布helloapp。
(1)進入helloapp應(yīng)用的根目錄/webapps/helloapp。
(2)把整個Web應(yīng)用打包為helloapp.war文件,命令如下:
jar cvf helloapp.war *.*
在JDK的bin目錄下提供了打包程序jar.exe。如果要展開helloapp.war文件,命令為:
jar xvf helloapp.war
(3)把helloapp.war文件拷貝到/webapps目錄下。
(4)刪除原先的helloapp目錄。
(5)啟動Tomcat服務(wù)器。
Tomcat服務(wù)器啟動時,會把webapps目錄下的所有WAR文件自動展開為開放式的目錄結(jié)構(gòu)。所以服務(wù)器啟動后,會發(fā)現(xiàn)服務(wù)器把helloapp.war展開到 /webapps/helloapp目錄中。
2.3 配置虛擬主機
在Tomcat的配置文件server.xml中,Host元素代表虛擬主機,在同一個Engine元素下可以配置多個虛擬主機。例如,有兩個公司的Web應(yīng)用都發(fā)布在同一個Tomcat服務(wù)器上,可以為每家公司分別創(chuàng)建一個虛擬主機,它們的虛擬主機名分別為:
www.mycompany1.com www.mycompany2.com
這樣當(dāng)Web客戶訪問以上兩個Web應(yīng)用時,就好像這兩個應(yīng)用分別擁有各自的主機。此外,還可以為虛擬主機建立別名,例如,如果希望Web客戶訪問www.mycompany1.com或mycompany1.com都能連接到同一個Web,那么可以把mycompany1.com作為虛擬主機的別名來處理。
下面講解如何配置www.mycompany1.com虛擬主機。
(1)打開/conf/server.xml文件,會發(fā)現(xiàn)在元素中已經(jīng)有一個名為localhost的元素,可以在它的后面(即后面)加入如下元素:
<Host name="www.mycompany1.com" debug="0" appBase="C:\mycompany1" unpackWARs="true" autoDeploy="true"> <alias>mycompany1.com</alias> <alias>mycompany1</alias> <Context path="/helloapp" docBase="helloapp" debug="0" reloadable="true" /> </Host>
以上配置代碼位于本書配套光盤的sourcecode/chapter2/virtualhost-configure.xml文件中。
元素的屬性描述參見表2-5:
表2-5 元素的屬性
屬 性 描 述
name 指定虛擬主機的名字
debug 指定日志級別
appBase 指定虛擬主機的目錄, 可以指定絕對目錄, 也可以指定相對于的相對目錄。 如果此項沒有設(shè)定, 默認(rèn)值為/webapps
unpackWARs 如果此項設(shè)為true, 表示將把Web應(yīng)用的WAR文件先展開 為開放目錄結(jié)構(gòu)后再運行。 如果設(shè)為false,則直接運行WAR文件
autoDeploy 如果此項設(shè)為true, 表示當(dāng)Tomcat服務(wù)器處于運行狀態(tài)時, 能夠監(jiān)測appBase下的文件, 如果有新的Web應(yīng)用加入進來, 則會自動發(fā)布這個Web應(yīng)用
alias 指定虛擬主機的別名, 可以指定多個別名
deployOnStartup 如果此項設(shè)為true, 則表示Tomcat服務(wù)器啟動時會自動發(fā)布appBase 目錄下所有的Web應(yīng)用。 如果Web應(yīng)用在server.xml中 沒有相應(yīng)的元素, 則將采用默認(rèn)的Context配置。 deployOnStartup的默認(rèn)值為true
在的deployOnStartup屬性為true的情況下,即使你沒有在server.xml中為helloapp應(yīng)用加入元素,Tomcat服務(wù)器也可以自動發(fā)布和運行helloapp應(yīng)用。
在這種情況下,Tomcat使用默認(rèn)的DefaultContext。關(guān)于DefaultContext的知識可以參考Tomcat文檔:
/webapps/tomcat-docs/config/defaultcontext.html
(2)把helloapp應(yīng)用(helloapp.war文件或者是整個helloapp目錄)拷貝到appBase屬性指定的目錄C:\mycompany1下。
(3)為了使以上配置的虛擬主機生效,必須在DNS服務(wù)器中注冊以上的虛擬主機名和別名,使它們的IP地址都指向Tomcat服務(wù)器所在的機器。必須注冊以下名字:
www.mycompany1.com mycompany1.com mycompany1
(4)重啟Tomcat服務(wù)器,然后通過瀏覽器訪問:http://www.mycompany1.com/helloapp/index.htm,如果返回正常的頁面就說明配置成功。還可以通過虛擬機的別名來訪問helloapp應(yīng)用:
http://mycompany1.com/helloapp/index.htm
http://mycompany1/helloapp/index.htm
2.4 小 結(jié)
本章通過helloapp Web應(yīng)用例子,介紹了在Tomcat上創(chuàng)建和發(fā)布Web應(yīng)用的步驟。通過本章內(nèi)容,讀者可以學(xué)會創(chuàng)建Web應(yīng)用的目錄結(jié)構(gòu),創(chuàng)建web.xml文件,并且能夠把HTML、Servlet、JSP和Tag Library部署到Web應(yīng)用中。
此外,讀者還可以掌握將整個Web應(yīng)用打包并發(fā)布的方法。本章還介紹了配置虛擬主機的方法。為了便于讀者編譯源程序,在本書配套光盤的sourcecode/chapter2目錄下提供了編譯本章Java程序的腳本compile.bat,它的內(nèi)容如下:
set catalina_home=C:\jakarta-tomcat set path=%path%;C:\j2sdk1.4.2\bin set currpath=. if "%OS%" == "Windows_NT" set currpath=%~dp0% set src=%currpath%helloapp\src set dest=%currpath%helloapp \WEB-INF\classes set classpath= %catalina_home% \common\lib\servlet-api.jar; %catalina_home%\common\lib\jsp-api.jar javac -sourcepath %src% -d %dest% %src%\mypack\DispatcherServlet.java javac -sourcepath %src% -d %dest% %src%\mypack\HelloTag.java
運行這個腳本時,只要重新設(shè)置以上Tomcat目錄和JDK的目錄即可。
在javac命令中,-sourcepath設(shè)定Java源文件的路徑,-d設(shè)定編譯生成的類的存放路徑。javac命令的-classpath參數(shù)可以設(shè)定classpath路徑,如果此項沒有設(shè)定,將參照環(huán)境變量classpath的設(shè)置。