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