本章將演示如何開發(fā)、部署和運(yùn)行由主流轉(zhuǎn)換JavaBeans 組件和用JavaServer Pageh(JSP)創(chuàng)建的Web頁面客戶端組成的簡單Web應(yīng)用。該應(yīng)用首先部署并運(yùn)行在Apache Software Foundation(www.apache.org)開發(fā)出來的Java Servlet和JSP容器,即Tomcat上,且與Java Web Services Developer Pack(Java WSDP)包含在一起。本章作為引言,介紹了如何利用Tomcat部署Web服務(wù)和Web應(yīng)用。本章中的材料為該教程中其他章節(jié)提供了基礎(chǔ)。
設(shè)置
注意:在開始開發(fā)示例應(yīng)用前,將先閱讀關(guān)于該教程中的說明,然后繼續(xù)本節(jié)的學(xué)習(xí)。
獲取示例代碼
該示例的源代碼可以在<JWSDP_HOME>/docs/tutorial/examples/gs/,即解壓該教程的捆綁包時(shí)所創(chuàng)建的一個(gè)目錄中找到。如果想在線閱讀該教程,可以從下面的地址下載教程捆綁包:
示例代碼的布局
在該示例應(yīng)用中,源代碼目錄按照“實(shí)現(xiàn)Web服務(wù)程序設(shè)計(jì)的最佳做法”來組織,這些最佳做法的更多細(xì)節(jié)描述在<JWSDP_HOME>/docs/tomcat/appdev/deployment.html文件中。基本上而言,這個(gè)文檔說明了在創(chuàng)建Web應(yīng)用時(shí)檢查它的運(yùn)行時(shí)結(jié)構(gòu)很有用。Web應(yīng)用被定義為標(biāo)準(zhǔn)布局中目錄和文件的分層結(jié)構(gòu)。這樣的分層結(jié)構(gòu)可以通過它的未包裝格式訪問,其中在這種格式中每一個(gè)目錄和文件分別位于單獨(dú)的文件系統(tǒng)中,或者以Web應(yīng)用檔案(或WAR)文件這樣的包裝格式存在。前一種格式在開發(fā)期間更有用,而后者通常用在分發(fā)應(yīng)用以便安裝時(shí)。
為了便于創(chuàng)建所需格式的WAR文件,最好布置一下Tomcat在執(zhí)行與WAR格式本身所需結(jié)構(gòu)相同的應(yīng)用時(shí)所使用的文件。在該示例應(yīng)用中,<JWSDP_HOME>/docs/tutorial/examples/gs/是該應(yīng)用源代碼的根目錄。該應(yīng)用由如下文件組成,其中這些文件位于/gs目錄或者/gs的子目錄中。
-
/src/converterApp/ConverterBean.java——包含
yenAmount
和euroAmount屬性的get和set方法的
JavaBeans組件,其中這兩個(gè)屬性用來將美元轉(zhuǎn)換為日元并將日元轉(zhuǎn)換到歐元。 -
/web/index/jsp——Web客戶端,它是一個(gè)接受將被轉(zhuǎn)換的值的JavaServlet頁面、提交該值的按鈕,以及該轉(zhuǎn)換的結(jié)果。
-
/web/WEB-INT/web.xml——該應(yīng)用的部署描述符。在該簡單示例中,它包含示例應(yīng)用的一個(gè)描述。
關(guān)于WAR文件的更多信息可以在Web應(yīng)用檔案中找到。
Tomcat應(yīng)用開發(fā)指南中一個(gè)關(guān)鍵的建議是從包含可部署應(yīng)用的目錄分層中分離出包含源代碼的目錄分層。進(jìn)行這種分離有以下優(yōu)點(diǎn):
如 創(chuàng)建Ant的生成和部署文件一節(jié)中所述,Ant開發(fā)工具使得這種目錄分層的創(chuàng)建和處理變得相對(duì)簡單。
該文檔的其余部分演示了如何創(chuàng)建、構(gòu)建、部署和運(yùn)行該示例應(yīng)用。
設(shè)置路徑變量
在PATH環(huán)境變量的前面添加Java WSDP、Java2軟件開發(fā)工具包和標(biāo)準(zhǔn)版(J2SE,SDK)的bin目錄,以便Tomcat的Java WSDP啟動(dòng)腳本覆蓋其他的安裝,這一點(diǎn)非常重要。
另外,大多數(shù)例子是和Ant 1.5.1版的配置文件一起分發(fā)的,其中Ant是包含在Java WSDP中的一個(gè)可移植的生成工具。這個(gè)與Java WSDP一起發(fā)布的Ant的版本設(shè)置了jwsdp.home環(huán)境變量,這是示例生成文件所必須的。為保證能使用該Ant版本,必須在
PATH前面添加
<
JWSDP_HOME
>/jakarta-ant-1.5.1/bin
。
創(chuàng)建生成屬性文件
為了調(diào)用更多的Ant任務(wù),需要在主目錄內(nèi)布置命名為build.properties文件。在Solaris操作系統(tǒng)上,主目錄的格式通常為/home/your_login_name。在Windows操作環(huán)境中(例如Windows 2000)主目錄一般是c:\Document and Settings\yourProfile。
Build.properties文件包含的純文本格式的用戶名和密碼與安裝期間設(shè)置的用戶名和密碼匹配。在Java WSDP的安裝期間輸入的用戶名和密碼存儲(chǔ)在<JWSDP_HOME>/conf/tomcat-users.xml中。
出于安全目的,Tomcat Manager在同意你訪問服務(wù)器之前,首先要驗(yàn)證你(定義在build.properties文件中)是否有權(quán)安裝和重載這些應(yīng)用(定義在tomcat-user.xml中) 。
如果還沒有在主目錄中創(chuàng)建build.properties文件,那么可以這么做。文件將如下所示:
username=
your_username
注意:出于安全目的,需要?jiǎng)?chuàng)建只有你自己才能讀取的build.properties文件。
安裝程序創(chuàng)建的Tomcat-users.xml文件如下所示:
<?xml version='1.0'?>
<tomcat-users>
<role rolename="admin"/>
<role rolename="manager"/>
<role rolename="provider"/>
<user username="your_username
" password="your_password
"
?????roles="admin,manager,provider"/>
既然已經(jīng)為運(yùn)行該示例應(yīng)用而下載了應(yīng)用程序并得到了環(huán)境設(shè)置,本小節(jié)將簡單地介紹運(yùn)行該應(yīng)用程序所需的步驟。每步討論的詳細(xì)細(xì)節(jié)可在相關(guān)頁面中找到。
1.遵循 設(shè)置 中的步驟。
2.改變該應(yīng)用的目錄<JWSDP_HOME>/docstutorial/examples/gs(見 創(chuàng)建Getting Started應(yīng)用 )。
3.通過在終端提示窗口中輸入下列命令編譯源文件(見 使用Ant構(gòu)建Getting Started應(yīng)用 ):
?? 編譯錯(cuò)誤 一節(jié)中列出了其中可能出現(xiàn)的編譯錯(cuò)誤。
?????? ?????4.通過在終端提示窗口中輸入下列命令啟動(dòng)Tomcat(見 啟動(dòng)Tomcat )
??????????????? <JWSDP_HOME>/bin/startup.sh????????(Unix platform)
<JWSDP_HOME>\bin\startup???????????(Microsoft Windows)
??????????? 5.通過在終端提示窗口中輸入下列命令來利用Ant部署Web應(yīng)用(見 使用Ant安裝應(yīng)用程序 )
?????????????? ant install
?????????????? 部署中出現(xiàn)的錯(cuò)誤見 部署錯(cuò)誤 。
??????????? 6.啟動(dòng)Web瀏覽器,輸入下列URL運(yùn)行示例應(yīng)用程序(見 運(yùn)行Gerzring Started應(yīng)用程序 ):
??????? ????????http://localhost:8080/GSApp
?????????? 7.通過在終端提示窗口中輸入下列命令關(guān)閉Tocmat:(見 關(guān)閉Tomcat )
????????????? <JWSDP_HOME>/bin/shutdown.sh????????(Unix platform)
<JWSDP_HOME>\bin\shutdown???????????(Microsoft Windows)
創(chuàng)建Getting Started應(yīng)用
示例應(yīng)用程序包含ConverterBean類、Web組件、用來構(gòu)建并運(yùn)行應(yīng)用程序的文件,以及部署描述符。對(duì)于本示例,我們將創(chuàng)建一個(gè)命名為gs/的頂級(jí)項(xiàng)目源目錄。該示例應(yīng)用程序中的所有文件都創(chuàng)建自這個(gè)根目錄。
ConverterBean組件
該示例程序中ConverterBean組件通常與JSP頁面結(jié)合起來使用,其結(jié)果應(yīng)用是一個(gè)能夠?qū)⒚涝D(zhuǎn)換成日元并將日元轉(zhuǎn)換成歐
元的表單。ConverterBean組件的源代碼在<JWSDP_HOME>/doca/tutorial/example/gs/src/converterApp/目錄內(nèi)。
ConverterBean組件編碼
該示例中的ConverterBean組件包含兩個(gè)屬性,yenAmount和euroAmount,以及這些屬性的set和get方法。ConverterBean組件的源代碼如下:
//ConverterBean.java
package converterApp;
?
import java.math.*;
?
public class ConverterBean{
?
??private BigDecimal yenRate;
??private BigDecimal euroRate;
??private BigDecimal yenAmount;
??private BigDecimal euroAmount;
?
??/** Creates new ConverterBean */
??public ConverterBean() {
????yenRate = new BigDecimal ("138.78");
????euroRate = new BigDecimal (".0084");
????yenAmount = new BigDecimal("0.0");
????euroAmount = new BigDecimal("0.0");
??}
??public BigDecimal getYenAmount () {
????return yenAmount;
??}
??public void setYenAmount(BigDecimal amount) {
????yenAmount = amount.multiply(yenRate);
????yenAmount =? yenAmount.setScale(2,BigDecimal.ROUND_UP);
??}
??public BigDecimal getEuroAmount () {
????return euroAmount;
??}
??public void setEuroAmount (BigDecimal amount) {
????euroAmount = amount.multiply(euroRate);
????euroAmount =
??????euroAmount.setScale(2,BigDecimal.ROUND_UP);
??}
Web客戶端
Web客戶端包含在JSP頁面<JWSDP_HOME>/docs/tutorial/examples/gs/web/index.jap中。JSP頁面是包含靜態(tài)和動(dòng)態(tài)內(nèi)容的基于文本的文檔。靜態(tài)內(nèi)容能表示成基于任何文本格式的模板數(shù)據(jù),比如HTML、WML、或者XML格式。JSP元素構(gòu)成了動(dòng)態(tài)內(nèi)容。
Web客戶端編碼
JSP頁面index.jsp用來創(chuàng)建表單,該表單在應(yīng)用的客戶端運(yùn)行時(shí)出現(xiàn)在Web瀏覽器中。JSP頁面是靜態(tài)HTML標(biāo)記和JSP元素的典型混合體。如果開發(fā)過Web頁面,應(yīng)該熟悉創(chuàng)建表單<form>和菜單<select>的HTML文檔結(jié)構(gòu)聲明(<head>,<body>,等等)和HTML聲明。示例中的這些突出行包含了下列JSP結(jié)構(gòu)類型:
·?? 指示(
<%@page ... %>
)ConverterBean類中的導(dǎo)入類,并且設(shè)置頁面返回的內(nèi)容類型。
·?? 這個(gè)jsp:usebean元素聲明頁面將使用存儲(chǔ)在指定作用域內(nèi)并可從該作用域訪問的一個(gè)bean。默認(rèn)的作用域是頁面,因此
我們就不明確在示例中設(shè)置它。
·?? jsp:setProperty元素 用來設(shè)置JSP頁面中的JavaBean組件屬性。
·?? Jsp.getProperty元素用來檢索JSP頁面中的JavaBean組件。
·?? Scriplets(<%
...%
>)檢索amount請求參數(shù)的值,將其轉(zhuǎn)換成BigDecimal,并且將該值轉(zhuǎn)換為日元或者歐元。
·?? 表達(dá)式(<%
= ...%
>)將amount的值插入到響應(yīng)中。
<%-- index.jsp --%>
<%@ page import="converterApp.ConverterBean,java.math.*" %>
<%@ page contentType="text/html; charset=ISO-8859-5" %>
?
<html>
<head>
<title>Currency Conversion Application</title>
</head>
?
<body bgcolor="white">
"<jsp:useBean id="converter"
class="converterApp.ConverterBean"/>
?
<h1><FONT FACE="ARIAL" SIZE=12>Currency Conversion Application
</FONT></h1>
<hr>
<p><FONT FACE="ARIAL" SIZE=10>Enter an amount to convert:</p>
</FONT>
<form method="get">
<input type="text" name="amount" size="25">
<br>
<p>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</form>
<%
String amount = request.getParameter("amount");
?
if ( amount != null && amount.length() > 0 ) {
?
%>
<p><FONT FACE="ARIAL" SIZE=10><%= amount %> dollars are?
?
<jsp:setProperty name="converter" property="yenAmount"
value="<%= new BigDecimal(amount)%>" />
<jsp:getProperty name="converter" property="yenAmount"? /> Yen.
?
<p><%= amount %> Yen are
?
<jsp:setProperty name="converter" property="euroAmount"
value="<%= new BigDecimal(amount)%>" />
<jsp:getProperty name="converter" property="euroAmount"? />
Euro. </FONT>
?
<%
}
%>
?
</body>
</html>
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
