使用Ant與Tomcat創(chuàng)建Web應(yīng)用 發(fā)表時(shí)間:2024-01-21 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣: [摘要]使用何種技術(shù) 我使用Tomcat 4的Servlet/JPS容器技術(shù)實(shí)現(xiàn)一個(gè)Web應(yīng)用程序。這個(gè)過(guò)程中仍然有許多不確定的事,在多種可行的技術(shù)中選一種可不是一件容易的事。這篇文章中,我選擇盡量簡(jiǎn)單的解決方案,混合使用Java Server Pages(JSPs)以及Java。 應(yīng)當(dāng)盡量避免使... 使用何種技術(shù)
我使用Tomcat 4的Servlet/JPS容器技術(shù)實(shí)現(xiàn)一個(gè)Web應(yīng)用程序。這個(gè)過(guò)程中仍然有許多不確定的事,在多種可行的技術(shù)中選一種可不是一件容易的事。這篇文章中,我選擇盡量簡(jiǎn)單的解決方案,混合使用Java Server Pages(JSPs)以及Java。
應(yīng)當(dāng)盡量避免使用JSPs實(shí)現(xiàn)復(fù)雜邏輯;那種程序也許容易寫,但難以調(diào)試而且?guī)缀醪豢赡鼙焕斫夂途S護(hù)。好的解決方案是用JSPs負(fù)責(zé)Web頁(yè)面的顯示(這正是JSPs擅長(zhǎng)的),把復(fù)雜邏輯的實(shí)現(xiàn)交給Java,如對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。這樣,程序不但比較容易實(shí)現(xiàn)和調(diào)試,而且易于理解和維護(hù)。
這個(gè)Web應(yīng)用程序可以運(yùn)行在專用Web服務(wù)器或者是個(gè)人電腦上,操作系統(tǒng)可以是Windows,Linux,或者M(jìn)ac OS。所需的軟件包有Java運(yùn)行時(shí)環(huán)境(JDK1.2或以上版本),Tomcat最新版本(Tomacat 4或以上版本),以及Ant開(kāi)發(fā)工具(Ant 1.4或以上版本)。Ant用于創(chuàng)建Web應(yīng)用程序包(WAR),以及在Tomcat上安裝部署WAR文件,配置關(guān)系數(shù)據(jù)庫(kù)接口javax.sql.DataSource。所有以上提到的軟件包都可以通過(guò)Internet免費(fèi)獲得。
這個(gè)Web應(yīng)用程序還需要一個(gè)數(shù)據(jù)庫(kù)。幾乎所有支持SQL而且有JDBC驅(qū)動(dòng)的關(guān)系數(shù)據(jù)庫(kù)都可以。MySQL是一個(gè)符合條件的不錯(cuò)選擇。從MySQL.com可以得到MySQL的最新版本以及它的JDBC驅(qū)動(dòng)Connector/J。
為了讓Ant與Tomact管理軟件協(xié)同工作,需要將catalina-ant.jar從Tomcat的server/lib目錄拷貝到Ant的lib目錄下。將你的數(shù)據(jù)庫(kù)JDBC驅(qū)動(dòng)程序復(fù)制到Tomcat的common/lib目錄下使Tomcat和其上的Web應(yīng)用程序可以訪問(wèn)數(shù)據(jù)庫(kù)。最后,必須建立Tomcat的admin和manager角色(roles),及其用戶名和密碼,編輯Tomcat的conf目錄下的tomcat-user.xml文件如下:
<?xml version='1.0'?> <tomcat-users> <role rolename="admin"/> <role rolename="manager"/> <user username="tomcatusername" password="tomcatpassword" roles="admin,manager"/> </tomcat-users> |
我的開(kāi)發(fā)環(huán)境是Apple Cube,運(yùn)行Mac OS X 10.2.1操作系統(tǒng),軟件包JDK 1.3.1,Tomcat 4.1.12,Ant1.5.1,MySQL 3.23.52,及Connector/J 3.0.1-beta。操作系統(tǒng)升級(jí)到Mac OS X 10.2.2未出現(xiàn)任何問(wèn)題。同樣Tomcat升級(jí)到4.1.17也沒(méi)出現(xiàn)問(wèn)題。
Web應(yīng)用程序
本文通過(guò)一個(gè)叫做AddressBook的簡(jiǎn)單地址簿程序來(lái)說(shuō)明如何應(yīng)用將要介紹的技術(shù)。這個(gè)應(yīng)用程序的目的不是建立一個(gè)地址簿的正式版本,它僅僅是一個(gè)例子。
AddressBook中的Java程序: AddressBook中包含三個(gè)Java程序。圖1顯示了他們?cè)赥omcat中的是如何使用的。
AddressBook.ContextListener: AddressBook.ContextListener是一個(gè)servlet上下文監(jiān)聽(tīng)器,它在AddressBook開(kāi)始和關(guān)閉時(shí)被調(diào)用,可以使用AddressBook的部署描述文件web.xml配置。當(dāng)AddressBook開(kāi)始運(yùn)行時(shí),創(chuàng)建一個(gè)AddressesDB的實(shí)例并將它作為一個(gè)上下文屬性保存;而當(dāng)AddressBook運(yùn)行結(jié)束時(shí),從上下文屬性中取出AddressesDB對(duì)象并關(guān)閉數(shù)據(jù)庫(kù)連接。在運(yùn)行過(guò)程中,當(dāng)JSPs需要連接數(shù)據(jù)庫(kù),它們將訪問(wèn)上下文屬性中的AddressesDB對(duì)象。細(xì)節(jié)請(qǐng)看ContextListener.java的完整的帶有注釋的源代碼。
AddressBook. AddressesDB: AddressBook. AddressesDB用于操作地址數(shù)據(jù)庫(kù)。它的構(gòu)造函數(shù)建立一個(gè)數(shù)據(jù)庫(kù)連接,這個(gè)會(huì)話可以被多個(gè)Web會(huì)話共享。這個(gè)類提供多個(gè)數(shù)據(jù)庫(kù)連接函數(shù):
getAddress(id)返回用id標(biāo)識(shí)的地址,如果地址沒(méi)找到則返回null。
addAddress(address)添加地址并返回改變的行數(shù)
deleteAddress(id)刪除地址并返回改變的行數(shù)
getAddresses()返回?cái)?shù)據(jù)庫(kù)中所有地址的聚集,如果數(shù)據(jù)庫(kù)無(wú)效返回null
close()關(guān)閉數(shù)據(jù)庫(kù)連接
細(xì)節(jié)請(qǐng)看AddressesDB.java的完整的帶有注釋的源代碼。
AddressBook. Address: AddressBook. Address是用于描述地址的類。在用JSPs編程時(shí),用類集中描述數(shù)據(jù)仍不失為一個(gè)好的方法。在AddressBook中使用的就是這種方法。AddressBook. Address的構(gòu)造函數(shù)將地址內(nèi)容保存于對(duì)象中。這個(gè)類中包括取得單個(gè)地址域的普通get函數(shù),兩個(gè)獲取合并的地址域的get函數(shù),以及一個(gè)地址比較函數(shù):
Address(id,surname,fisrtname,street,district,city,postcode)
getId()
getSurname()
getFirstname()
getStreet()
getDistrict()
getCity()
getPostcode()
getFullname()返回firstname+” ”+surname
getFulladdress()返回street+” ”+district+” ”+city+” ”+postcode
compareTo(address)返回負(fù)整數(shù)、零、正整數(shù),分別對(duì)應(yīng)surname和firstname大于、等于、小于這個(gè)surname和firstname,比較是大小寫不敏感的。在存儲(chǔ)地址聚集時(shí)使用。
細(xì)節(jié)請(qǐng)看Address.java的完整的,帶有注釋的源代碼。
AddressBook中的JSP頁(yè)面: AddressBook有七個(gè)JSP頁(yè)。每個(gè)代表一個(gè)對(duì)AddressBook數(shù)據(jù)庫(kù)進(jìn)行獨(dú)立操作的Web頁(yè)。每個(gè)頁(yè)面數(shù)據(jù)庫(kù)的狀態(tài)與前頁(yè)數(shù)據(jù)庫(kù)的狀態(tài)是相互獨(dú)立的。如果數(shù)據(jù)庫(kù)被其他用戶改變了,Web頁(yè)面將檢測(cè)到并產(chǎn)生相應(yīng)的動(dòng)作。例如,如果你正在修改一個(gè)地址而另一個(gè)用戶在確認(rèn)修改之前刪除了該地址,JSP將通知你修改不存在的地址失敗。
圖2顯示JSPs之間的邏輯關(guān)系。
Home.jsp: Home.jsp是AddressBook的主頁(yè),也就是用戶使用AddressBook時(shí)見(jiàn)到的第一個(gè)頁(yè)面。它用一個(gè)表顯示Address庫(kù)中的所有地址。表中的每一行顯示一個(gè)地址,以及刪除或修改地址的連接。頁(yè)面底部有一個(gè)添加新地址的連接。配置信息見(jiàn)web.xml notes。
添加地址連接將控制權(quán)交給RequestAdd.jsp
刪除地址連接將控制權(quán)交給RequestDelete.jsp,同時(shí)將要?jiǎng)h除的地址id傳遞給該頁(yè)
修改地址連接將控制權(quán)交給RequestModify.jsp,同時(shí)將要修改的地址id傳遞給該頁(yè)
細(xì)節(jié)請(qǐng)看Home.jsp的完整的帶有注釋的源代碼。
RequestAdd.jsp: RequestAdd.jsp提供一個(gè)地址表單用于輸入新地址。頁(yè)面底部的取消連接可以取消這次操作。
提交表單將新的地址域值以及控制權(quán)交給DoAdd.jsp
取消操作將控制權(quán)交給Home.jsp。細(xì)節(jié)請(qǐng)看RequestAdd.jsp的完整的,帶有注釋的源代碼。
DoAdd.jsp: DoAdd.jsp顯示接收到的地址域值。然后將新地址添加到數(shù)據(jù)庫(kù)并顯示是否成功的信息。頁(yè)面底部有一個(gè)繼續(xù)連接。
點(diǎn)擊繼續(xù)連接回到Home.jsp。細(xì)節(jié)請(qǐng)看DoAdd.jsp的完整的,帶有注釋的源代碼。
RequestDelete.jsp: RequestDelete.jsp讀取得到的id相應(yīng)的地址。該頁(yè)面在表中顯示地址域以便讓你確認(rèn)刪除的是正確的地址。頁(yè)面底部的兩個(gè)連接分別是繼續(xù)請(qǐng)求的繼續(xù)連接和取消請(qǐng)求的取消連接。
選擇繼續(xù)連接將轉(zhuǎn)到DoDelete.jsp并傳遞要?jiǎng)h除的地址id
選擇取消連接回到Home.jsp。細(xì)節(jié)請(qǐng)看RequestDelete.jsp的完整的帶有注釋的源代碼。
DoDelete.jsp: DoDelete.jsp讀取傳遞給它的id。在表中顯示該id對(duì)應(yīng)的地址,從數(shù)據(jù)庫(kù)中刪除它,并顯示是否成功。頁(yè)面底部是繼續(xù)連接。
選擇繼續(xù)連接回到Home.jsp。細(xì)節(jié)請(qǐng)看DoDelete.jsp的完整的,帶有注釋的源代碼。
RequestModify.jsp: RequestModify.jsp顯示一個(gè)表單并填入當(dāng)前的地址,同時(shí)提供提交按鈕和取消連接。
提交表單將新的地址域值以及控制權(quán)交給DoModify.jsp
選擇取消連接回到Home.jsp。細(xì)節(jié)請(qǐng)看RequestModify.jsp的完整的,帶有注釋的源代碼。
DoModify.jsp: DoModify.jsp顯示接收到的修改的地址域值。然后修改數(shù)據(jù)庫(kù)中的地址記錄,并返回成功與否。頁(yè)面底部是繼續(xù)連接。
選擇繼續(xù)連接回到Home.jsp。細(xì)節(jié)請(qǐng)看DoModify.jsp的完整的,帶有注釋的源代碼。
AddressBook的Addresses數(shù)據(jù)庫(kù)表: 如何建立數(shù)據(jù)庫(kù)取決于所用的數(shù)據(jù)庫(kù)軟件。若你用的不是MySQL以下的步驟就需要根據(jù)情況修改。AddressBook只有一個(gè)表Addresses,保存在數(shù)據(jù)庫(kù)Public中。表Addresses有七個(gè)域:
id,主鍵,自動(dòng)增長(zhǎng)的數(shù)據(jù)域
surname,長(zhǎng)度為24的字符域,保存聯(lián)系人的姓
firstname,長(zhǎng)度為24的字符域,保存聯(lián)系人的名
street,長(zhǎng)度為80的字符域,保存地址的第一行
district,長(zhǎng)度為80的字符域,保存地址的第二行
city,長(zhǎng)度為40的字符域,保存城市名
postcode,長(zhǎng)度為10的字符域,保存郵政編碼
首先建立MySQL數(shù)據(jù)庫(kù)(Mac OS X 10.2.1)。用管理員權(quán)限啟動(dòng)mysql命令行工具,需要的話輸入密碼。創(chuàng)建Public數(shù)據(jù)庫(kù),以及賬號(hào)mysqlusername密碼mysqlpassord。命令如下:
# mysql -u root -pmysql> create database Public;mysql> grant all privileges on Public.* to mysqlusername@localhost\identified by 'mysqlpassword' with grant option;mysql> flush privileges; |
然后,在Public數(shù)據(jù)庫(kù)中創(chuàng)建Addresses表。
mysql> create table Addresses ( \id int(8) primary key auto_increment, \surname varchar(24) not null, \firstname varchar(24) not null, \street varchar(80) not null, \district varchar(80) not null, \city varchar(40) not null, \postcode varchar(10) not null \); |
用命令Commit;提交。要檢查對(duì)表的操作是否正確,鍵入命令describe Addresser;,將得到如下結(jié)果:
+-----------+-------------+------+-----+---------+----------------+ Field Type Null Key Default Extra +-----------+-------------+------+-----+---------+----------------+ id int(8) PRI NULL auto_increment surname varchar(24) firstname varchar(24) street varchar(80) district varchar(80) city varchar(40) postcode varchar(10) +-----------+-------------+------+-----+---------+----------------+ |
現(xiàn)在可以插入一行來(lái)測(cè)試數(shù)據(jù)庫(kù)
mysql> insert into Addresses (surname, firstname, street, district,city, postcode) values ("Smith", "John", "1, The High Street,","Downtown,", "Metropolis.", "X99 9XX");mysql> commit;mysql> select * from Addresses; |
結(jié)果如下:
注意地址的id被自動(dòng)賦予值1。至此AddressesBook的數(shù)據(jù)庫(kù)創(chuàng)建完成。
配置AddresBook的開(kāi)發(fā)目錄
現(xiàn)在我們配置存放AddressBook源文件的目錄,以及Web應(yīng)用程序的war目錄,它也是存放Web應(yīng)用程序包的目錄。下載AddressBook源程序壓縮包。解壓后將得到Ant能夠處理的源程序目錄結(jié)構(gòu),如圖3所示。不需要對(duì)AddressBook的開(kāi)發(fā)目錄進(jìn)行特殊改變—建議將其解壓至你的home目錄(Mac OS)。
讓我們看看這些文件:
AddressBook/build.properties: AddressBook/build.properties含有若干被AddressBook/build.xml讀取得設(shè)置信息。定制build過(guò)程時(shí),盡量編輯較小的build.properties文件,而不要修改復(fù)雜的多的build.xml文件。
app.name=AddressBooktomcat.home=/usr/local/jakarta-tomcat-4.1.12manager.url=http://localhost:8080/managerusername=tomcatusernamepassword=tomcatpassword |
app.name參數(shù)不需要修改。如果將來(lái)要重用這些文件創(chuàng)建新的Web應(yīng)用程序時(shí)把該參數(shù)改為新的程序名。如果在本地機(jī)器上運(yùn)行Tomcat 4,則manager.url參數(shù)也不必修改。
tomcat.home參數(shù)為Tomcat的安裝目錄,以上的設(shè)置表示Tomcat 4.1.12安裝在/url/local目錄下(Mac OS)。Ant將根據(jù)這個(gè)參數(shù)設(shè)置編譯AddressBook時(shí)的CLASSPATH變量,使它包含Tomcat的common/lib.jar文件。(這樣Tomcat 和Web應(yīng)用程序都可以直接訪問(wèn)這個(gè)文件,而不必將其復(fù)制到應(yīng)用程序的WEB-INF/lib目錄下。)
Tomcat也有一個(gè)類似的目錄:shared/lib,給目錄下的.jar文件在運(yùn)行時(shí)對(duì)于應(yīng)用程序是可訪問(wèn)的,但對(duì)Tomcat是不可訪問(wèn)的。
參數(shù)tomcatusrename和tomcatpassword必須與Tomcat的配置文件conf/tomcat-users.xml中的設(shè)置一致。Ant使用它們以及manager.url取得在Tomcat環(huán)境中安裝AddressBook應(yīng)用的權(quán)限。
細(xì)節(jié)請(qǐng)看build.properties的完整帶有注釋的源代碼。
AddressBook/build.xml: AddressBook/build.xml文件是Ant的配置文件,它使用許多Ant的標(biāo)簽。以下是比較常用的:
· ant build 創(chuàng)建Web應(yīng)用程序
· ant install 安裝Web應(yīng)用程序用于測(cè)試
· ant remove 卸載Web應(yīng)用程序
· ant deploy安裝部署Web應(yīng)用程序
· ant undeploy卸載Web應(yīng)用程序
細(xì)節(jié)請(qǐng)看build.xml的完整的帶有注釋的源代碼。
AddressBook/context.xml: AddressBook/context.xml是在Ant處理安裝、重新載入、刪除、部署、卸載請(qǐng)求時(shí)裝入Tomcat中的。給文件記錄的是AddressBook的上下文信息,或者是Tomcat運(yùn)行AddressBook需要的參數(shù)。
Logger項(xiàng)定義了Tomcat用文本格式記錄AddressBook的事件日志,并存放于Tomcat的logs目錄下。以下Logger項(xiàng)定義了名為localhost_AddressBook_log.YYYY-MM-DD.txt的日志文件,其中YYYY-MM-DD為日志日期:
<Logger className="org.apache.catalina.logger.FileLogger" prefix= "localhost_AddressBook_log." suffix=".txt" timestamp="true"/> |
Resource和ResourceParams項(xiàng)定義Tomcat必須為AddressBook創(chuàng)建一個(gè)叫jdbc/Publicd的javax.sql.DataSource。以下設(shè)置創(chuàng)建了一個(gè)javax.sql.DataSource,其值為org.apache.commons.dbcp.BasicDataSourceFactory類,URL為jdbc:mysql://localhost:3306/Public?autoReconnect=true,JDBC驅(qū)動(dòng):org.gjt.mm.mysql.Driver,用戶名和密碼分別為:mysqlusername和mysqlpassword:
以上代碼將javax.sql.DataSource作為該Web應(yīng)用程序的上下文變量。如果該變量不止被一個(gè)Web應(yīng)用用到,可以將它定義為全局資源。細(xì)節(jié)請(qǐng)看context.xml的完整的帶有注釋的源代碼。
AddressBook/src/*.java: src目錄中存放Web應(yīng)用的三個(gè)Java程序。見(jiàn)Address.java,AddressesDB.java和ContextListener.java的描述。
AddressBook/web/*.jsp: web目錄存放Web應(yīng)用的七個(gè)JSP頁(yè)面。見(jiàn)Home.jsp, RequestAdd.jsp, DoAdd.jsp, RequestDelete.jsp, DoDelete.jsp, RequestModify.jsp, 和 DoModify.jsp的描述。
AddressBook/web/WEB-INF/web.xml: AddressBook/web/WEB-INF/web.xml是AddressBook的web應(yīng)用部署描述文件。其中包含兩個(gè)主要參數(shù):listener參數(shù)定義了Java類監(jiān)聽(tīng)器AddressBook.ContextListener,在程序啟動(dòng)和關(guān)閉是被調(diào)用。
<listener> <listener-class>AddressBook.ContextListener</listener-class></listener> |
welcom-file-list參數(shù)定義了AddressBook的首頁(yè)。如下設(shè)置定義AddressBook的首頁(yè)為Home.jsp。
<welcome-file-list> <welcome-file>Home.jsp</welcome-file></welcome-file-list> |
細(xì)節(jié)請(qǐng)看web.xml的完整的,帶有注釋的源代碼。
創(chuàng)建,安裝,部署和運(yùn)行AddressBook: 安裝AddressBook是先將當(dāng)前目錄改為AddressBook目錄,然后運(yùn)行Ant的install命令:
$ cd AddressBook$ ant install |
如果安裝失敗,檢查Tomcat的conf目錄下的tomcat-user.xml是否配置正確,以及catalina-ant.jar是否從Tomcat的server/lib目錄下拷貝到Ant的lib目錄。
注意ant install自動(dòng)觸發(fā)運(yùn)行Ant的若干個(gè)標(biāo)簽,依次為ant int,ant prepare,ant build和ant package:
· ant init初始化時(shí)間戳
· ant prepare在AddressBook目錄下創(chuàng)建war目錄結(jié)構(gòu),包括:一個(gè)war目錄,一個(gè)war/WAR-INF目錄,一個(gè)war/WEB-INF/classes目錄,及一個(gè)war/WEB-INF/lib目錄。
· ant build創(chuàng)建Web應(yīng)用程序,包括將jsp文件拷貝到war目錄下,將context.xml文件拷貝到war/META-INF目錄下,將web.xml文件拷貝到war/WEB-INF目錄下,并編譯Java文件結(jié)果存入war/WEB-INF/classes目錄下。
· ant package從war目錄創(chuàng)建Web程序包。Web程序包是由jar工具創(chuàng)建的.jar文件。
· 最后,ant install根據(jù)war/META-INF/context.xml的配置信息將Web程序包安裝到Tomcat中。你可能注意到不需要登陸root權(quán)限或Tomcat就可以安裝AddressBook,只要你的普通用戶賬號(hào)即可。Ant用定義在AddressBook/build.properties中的tomcatusername和tomcatpassword即可安全的執(zhí)行以上過(guò)程。
安裝過(guò)程因配置選項(xiàng)不同而不同,配置信息具體見(jiàn)AddressBook/build.xml。圖4顯示了構(gòu)成AddressBook Web應(yīng)用程序的war目錄結(jié)構(gòu)以及各種文件。
在瀏覽器地址欄中輸入地址http://localhost:8080/AddressBook測(cè)試AddressBook程序。應(yīng)該得到如圖5的顯示結(jié)果。如果應(yīng)用程序沒(méi)有正確運(yùn)行,先檢查Tomcat的common/lib目錄下有沒(méi)有數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)程序。如果數(shù)據(jù)庫(kù)驅(qū)動(dòng)正確應(yīng)用程序仍然不正確運(yùn)行,則檢查Tomcat的log目錄下的日志文件,這些文本格式的日志文件將幫助你發(fā)現(xiàn)錯(cuò)誤。
添加地址,然后修改它,再刪除它,再添加一個(gè)地址。你將看到id持續(xù)自動(dòng)增加。
開(kāi)發(fā)過(guò)程
AddressBook安裝成功之后,Tomcat調(diào)用AddressBook.ConextListener.contextInitialized創(chuàng)建AddressBook.AddressesDB的一個(gè)實(shí)例。AddressBook.AddressesDB通過(guò)jdbc/Public DataSource建立數(shù)據(jù)庫(kù)連接。AddressBook.ConextListener.contextInitialized將AddressBook.AddressesDB的實(shí)例作為一個(gè)servlet屬性(addressesDB)保存。
當(dāng)AddressBook的Home.jsp第一次被調(diào)用,Tomcat編譯并執(zhí)行它。Home.jsp通過(guò)servlet屬性addressesDB取得AddressBook.AddressesDB的實(shí)例,然后從數(shù)據(jù)庫(kù)中讀取地址并顯示。其他JSP頁(yè)面在第一次被使用時(shí)也要先編譯再執(zhí)行,讀取數(shù)據(jù)庫(kù)的方法同Home.jsp。
ant stop用于停止AddressBook程序。Tomcat自動(dòng)調(diào)用AddressBook.ContextListener.contextDestroyed取得上面提到的servlet屬性addressesDB和AddressBook.AddressesDB的實(shí)例,關(guān)閉數(shù)據(jù)庫(kù)連接并刪除servlet屬性addressesDB。
ant start用于啟動(dòng)AddressBook程序。Tomcat自動(dòng)調(diào)用AddressBook.ConextListener.contextInitialized重復(fù)啟動(dòng)過(guò)程。
整個(gè)Web應(yīng)用程序的開(kāi)發(fā)過(guò)程是這樣的:修改程序;用ant install創(chuàng)建并安裝;在瀏覽器中鍵入地址http://localhost:8080/applicationName(或點(diǎn)擊刷新按鈕)以測(cè)試Web程序;用ant remove刪除Web應(yīng)用程序的上下文信息;重復(fù)整個(gè)過(guò)程,直到調(diào)試完畢。當(dāng)程序調(diào)試完畢后,使用ant deploy正式將你的程序配置到服務(wù)器上。在重起Tomcat或者重起服務(wù)器后,你的應(yīng)用程序就開(kāi)始運(yùn)行了。要將Web應(yīng)用程序從你的服務(wù)器徹底刪除用ant undeploy命令。
Tomcat Manager
使用Tomcat Manager可以替代Ant。在瀏覽器中鍵入地址http://localhost:8080/manager/html/list,將出現(xiàn)如圖6所示的Tomcat Manager Web頁(yè)面。
或者,直接使用以下地址:
http://localhost:8080/manager/list
http://localhost:8080/manager/resources
http://localhost:8080/manager/start?path=/AddressBook
http://localhost:8080/manager/stop?path=/AddressBook
http://localhost:8080/manager/remove?path=/AddressBook
http://localhost:8080/manager/sessions?path=/AddressBook
Tomcat Administrator
要登陸Tomcat的基于Web的administrator,使用地址http://localhost:8080/admin。在登陸畫(huà)面中輸入Tomcat”admin”角色的用戶名和密碼,與”manager” 角色的相同為tomcatusername和tomcatpassword。Tomcat-users.xml文件為admin,manager以及provider角色建立了相同的賬號(hào)。為每個(gè)Tomcat角色建立不同的賬號(hào)是不必要的。
控制頁(yè)面分為三個(gè)面板:頭面板,樹(shù)面板和數(shù)據(jù)面板。如圖7所示:
樹(shù)的分支可被展開(kāi)和選定。依次展開(kāi)Service{Tomcat-Standalone} ->Host{localhost}->Context{/AddressBook},最后AddressBook的Resource分支。注意不要將樹(shù)底部的全局Resource分支與AddressBook的Resource分支混淆。全局Resource分支可以用來(lái)定義任何Web應(yīng)用程序都可用的全局資源。
AddressBook的上下文面板
選擇Context{/AddressBook}分支,將看到AddressBook的上下文面板(如圖8)。
你可以隨意改變?cè)撁姘宓膮?shù),主要是三種不同的Debug Level參數(shù)。要保存設(shè)置點(diǎn)擊Save按鈕然后點(diǎn)擊頭面板中的Commit Changes按鈕。
AddressBook的Data Source面板
選擇Context{/AddressBook}的Resource分支中的Data Source分支,你將看到AddressBook的Data Source面板。選擇數(shù)據(jù)源jdbc/Public顯示javax.sql.DataSource(如圖9)。
你可以隨意改變?cè)撁姘宓膮?shù),包括Data Source URL, JDBC Driver Class, User Name, Password, Max. Active Connections, Max. Idle Connections和 Max. Wait for Connection參數(shù)。要保存設(shè)置點(diǎn)擊Save按鈕然后點(diǎn)擊頭面板中的Commit Changes按鈕。
如果你在你的個(gè)人電腦上運(yùn)行Web應(yīng)用程序,這也許不重要,但是如果在作為公司產(chǎn)品的Web服務(wù)器,這就很重要。這些參數(shù)可以被安全的改變,而且不是只有程序員能夠更改,Tomcat administrator同樣可以。作為一個(gè)程序員我要記住許多賬號(hào)和密碼,我不想知道公司的產(chǎn)品數(shù)據(jù)庫(kù)的賬號(hào)和密碼。本來(lái)這個(gè)賬號(hào)和密碼是必要的,但是有了javax.sql.DataSource和Tomcat 4的administrator服務(wù),我就不必知道它們了。
Ant用于在開(kāi)發(fā)軟件時(shí)建立Web應(yīng)用程序上下文,而Tomcat administrator服務(wù)用在產(chǎn)品環(huán)境中。
AddressBook的日志面板
選擇樹(shù)中的Context{/AddressBook}分支的Logger for Context{/AddressBook}分支,將看到如圖10所示的AddressBook的日志面板
你可以隨意改變?cè)撁姘宓膮?shù),主要是Debug Level和Verbosity Level參數(shù)。要保存設(shè)置點(diǎn)擊Save按鈕然后點(diǎn)擊頭面板中的Commit Changes按鈕。 | |