《Web網(wǎng)站設計與開發(fā)教程》課件第10章_第1頁
《Web網(wǎng)站設計與開發(fā)教程》課件第10章_第2頁
《Web網(wǎng)站設計與開發(fā)教程》課件第10章_第3頁
《Web網(wǎng)站設計與開發(fā)教程》課件第10章_第4頁
《Web網(wǎng)站設計與開發(fā)教程》課件第10章_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第10章應用JavaBean技術10.1JavaBean構造方法 10.2useBean動作10.3應用JavaBean的開發(fā)實例

【學習提示】在JSP程序和Java程序開發(fā)過程中,有很多代碼段是可以重復使用的,如對數(shù)據(jù)庫的操作、用戶的有效性檢查及某項特定功能的實現(xiàn)等。為了解決這個問題,提高開發(fā)效率,Sun公司推出了JavaBean。本章將講述如何編寫JavaBean,及其在JSP中的使用方法,并給出具體的應用實例。

JavaBean是由Java語言編寫的可重用組件。JavaBean可分為兩種:一種是有用戶界面,如按鈕、滾動條或復雜的數(shù)據(jù)表格等;還有一種是沒有用戶界面,主要負責處理事務,比如邏輯運算、數(shù)據(jù)庫操作等。JSP通常訪問的是后一種JavaBean,在JSP中調用JavaBean的主要作用就是使JSP文件本身能夠擺脫大量的事物處理代碼,而主要關注結果的表現(xiàn)方式。10.1JavaBean構造方法

JavaBean作為一種Java類,必須被定義為public,另外需要遵守一些規(guī)范:

(1)

JavaBean類如果有構造函數(shù),則必須是有一個無參數(shù)的public構造函數(shù),以便讓容器對象在設計和運行時生成JavaBean實例化對象。

(2)

JavaBean類可以包含屬性,而屬性的定義是由getXxx和setXxx函數(shù)構成的,即JavaBean類包含屬性xxx(在set/get函數(shù)中屬性名首字母要大寫,調用屬性時首字母為小寫)。對于boolean類型的屬性,可以用“is”函數(shù)來代替get函數(shù)。

(3)J

avaBean類為可串行化(Serializable),即使對象中的屬性和狀態(tài)可以被持久地保存于文件或數(shù)據(jù)庫中。

下面的例子中,JavaBean類的定義存儲到文件PersonBean.java中。

PersonBean.java

packagebeans;

/**

*Class<code>PersonBean</code>.

*/

publicclassPersonBeanimplementsjava.io.Serializable{

privateStringname;

privatebooleandeceased;

/**沒有參數(shù)的構造方法.*/

publicPersonBean(){

}

/***獲取屬性name的值,注意方法名為getName,屬性名的首字母要大寫

*/

publicStringgetName(){

return;

}

/***設置屬性name的值,注意方法名為setName,屬性名的首字母要大寫,必須有參變量*/

publicvoidsetName(finalStringname){

=name;

}

/**

*獲取屬性"deceased"的值*Differentsyntaxforabooleanfield(isvs.get)

*/

publicbooleanisDeceased(){

returnthis.deceased;

}

/**

*設置屬性"deceased"的值

*@paramdeceased*/

publicvoidsetDeceased(finalbooleandeceased){

this.deceased=deceased;

}

}

在文件TestPersonBean.java中將生成JavaBean的實例進行測試。

importbeans.PersonBean;

/***Class<code>TestPersonBean</code>.

*/

publicclassTestPersonBean{

/**

*Testermethod<code>main</code>forclass<code>PersonBean</code>.

*@paramargs

*/

publicstaticvoidmain(String[]args){

PersonBeanperson=newPersonBean();

person.setName("Bob");

person.setDeceased(false);

//Output:"Bob[alive]"

System.out.print(person.getName());

System.out.println(person.isDeceased()?"[deceased]":"[alive]");

}

}這個程序將產生下面的結果,如圖10-1所示。

圖10-1測試JavaBean實例“TestPersonBean”的運行結果

如果要在JSP中使用某個JavaBean對象,可以采用useBean動作標簽。useBean的語法格式如下:

<jsp:useBeanid="name"class="classname"scope="page|request|session|application"/>

其中,id屬性用來定義JavaBean的實例名,class屬性確定JavaBean的實現(xiàn)類。scope屬性用于指定JavaBean實例的作用范圍,該范圍有四種取值,下面對JavaBean的有效范圍進行詳細介紹。10.2useBean動作10.2.1JavaBean的有效范圍

采用useBean動作聲明的JavaBean實例有效范圍依據(jù)scope屬性的取值,有以下四種:

(1)

page:JSP引擎為每個用戶分配不同的beans,盡管每個用戶的beans功能一樣,但是它們占用的內存空間不同。該beans只在當前頁面有效,當用戶離開該頁面時,JSP引擎取消分配給該用戶的beans。

(2)

request:beans的有效范圍在request生命期內。

在任何執(zhí)行相同請求的JSP文件中使用該beans,直到頁面執(zhí)行完畢向客戶端發(fā)回響應或轉到另一個文件為止??梢允褂胷equest對象訪問該beans,如request.getAttributes(beanName)。

(3)

session:beans的有效范圍在會話期間。從創(chuàng)建beans開始,就能在任何相同beans的JSP文件中使用該beans。如果在一個session生命周期內,用戶訪問了多個頁面,這些頁面都包含一個useBean標簽,而這些useBean標簽中的id值一樣,那么用戶在這些頁面中使用的beans是同一個beans。也就是說,如果用戶在某個頁面中改變了beans的某個屬性值,則其他頁面beans的該屬性值也會發(fā)生相同的變化。注意:在創(chuàng)建beans的JSP文件的page指令中必須指定session為“true”。

(4)

application:從創(chuàng)建beans開始,就能在任何相同application的JSP文件中使用該beans,它存在于整個application生命周期內,任何共享此application的JSP文件都能使用同一beans。即所有的用戶共享一個beans,如果有某個用戶更改了該beans的某個屬性值,那么所有用戶beans的該屬性值都將發(fā)生相同的變化,這個beans一直到服務器關閉時才被取消。10.2.2useBean的工作過程

useBean動作標簽的具體執(zhí)行過程如下:

(1)在指定的scope中查找名為name的JavaBean實例。

(2)若找到,則創(chuàng)建一個名為name、類型為classname的局部變量,其引用指向該JavaBean;若未找到,則在該scope中創(chuàng)建一個名為name、類型為classname的JavaBean,并創(chuàng)建相應的局部變量指向它。10.2.3設置和獲取JavaBean屬性值

當在JSP文件中采用useBean動作標簽創(chuàng)建一個JavaBean實例后,使用setProperty動作標簽設置JavaBean的屬性值,具體語法格式如下:

<jsp:setPropertyname="beanName"propertyDetails/>

其中:

(1)

name="beanname"

是必選屬性。其值為JavaBean的實例名稱,即在這之前用jsp:useBean引入的id。

(2)

propertyDetails可以通過四種不同的方法來指定屬性的信息。

property=“

”。這是一種設置JavaBean屬性的快捷方式。在JavaBean中,屬性的名稱、類型必須和request對象中的參數(shù)名稱相匹配。如果request對象的屬性值中有空值,那么對應的JavaBean屬性將不會設置任何值。同樣,如果JavaBean中有一個屬性沒有與之對應的request參數(shù)值,那么這個屬性同樣不會設定。使用property=“

”,JavaBean的屬性不用按HTML表單中的順序排序。②property=“propertyName”。使用request中的一個參數(shù)值來指定JavaBean中的一個屬性值。這里,property指定為JavaBean的屬性名,而且JavaBean屬性和request參數(shù)的名稱應相同。如果request對象的參數(shù)值中有空值,那么對應的JavaBean屬性將不會被設定任何值。

③property=“propertyName”param=“parameterName”。在JavaBean屬性的名稱和request中參數(shù)的名稱不同時可以使用這個方法。Param指定request中的參數(shù)名。如果request對象的參數(shù)值中有空值,那么對應的JavaBean屬性將不會被設定任何值。④property=“propertyName”value=“propertyValue”。value是一個可選屬性,它使用指定的值來設定JavaBean的屬性。如果參數(shù)值為空,那么對應的屬性值也不會被設定。不能在一個<jsp:setProperty>中同時使用param和value。

當要獲取JavaBean的屬性值時,可以使用getProperty動作標簽,具體語法格式如下:

<jsp:getPropertyname="beanName"property="propertyName"/>

其中,name是必選屬性,其值為JavaBean的實例名;property也是一個必選屬性,其值為前面name指定的JavaBean的屬性名。下面我們把前面編譯好的JavaBeanclass文件“PersonBean.class”放置到Web應用下的WEB-INF\classes\beans目錄下,同時編寫testPersonBean.jsp文件,在JSP頁面中聲明有效范圍為page的JavaBean實例“person”,并通過表單由用戶設置person的兩個屬性值,然后運用getProperty獲取name和deceased這兩個屬性值,并在頁面中進行顯示。具體代碼如下:

testPersonBean.jsp:

<%@pagelanguage="java"pageEncoding="utf-8"%>

<%//UseofPersonBeaninaJSP.%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<!--下面代碼在JSP中通過useBean動作標簽引入一個id為person,Java類為PersonBean的Bean實例-->

<jsp:useBeanid="person"class="beans.PersonBean"scope="page"/>

<!--下一行代碼利用表單beanTest中用戶輸入的值為person設置屬性值-->

<jsp:setPropertyname="person"property="*"/>

<html>

<head>

<title>useBean動作示例</title>

</head>

<body>

Name:<jsp:getPropertyname="person"property="name"/><br>

<!--獲取person的屬性name的屬性值-->

Deceased?<jsp:getPropertyname="person"property="deceased"/><br>

<!--獲取person的屬性deceased的屬性值-->

<!--下面創(chuàng)建的表單beanTest讓用戶輸入信息,為名為person的JavaBean提供屬性值-->

<formname="beanTest"method="post"action="testPersonBean.jsp">

Enteraname:<inputtype="text"name="name"size="50"><br>

Chooseanoption:

<selectname="deceased">

<optionvalue="false">Alive</option>

<optionvalue="true">Dead</option>

</select>

<inputtype="submit"value="TesttheBean">

</form>

</body>

</html>

testPersonBean.jsp的運行結果如圖10-2所示,此時名為person的javaBean的name屬性值為空,deceased屬性值為默認值false;當在表單中填入相關信息并點擊“TesttheBean”按鈕后,會顯示如圖10-3所示的person的相關屬性值。

圖10-2testPersonBean的首次運行結果

圖10-3testPersonBean設置屬性值后的運行結果

為了深入理解JavaBean在網(wǎng)站開發(fā)中的作用,我們下面給出兩個具體的開發(fā)實例。

實例一:運用JavaBean在JSP頁面顯示當前的日期和時間。

首先,運用Calendar類的相關方法編寫獲取時間和日期的JavaBean類文件,編譯成字節(jié)碼文件后存放到Web應用根目錄的WEB-INF\calsses\beans文件夾下。ShowCalendar類的具體代碼如下:

ShowCalendar.java10.3應用JavaBean的開發(fā)實例

/**

*Class<code>ShowCalendar</code>.

*/

packagebeans;

importjava.util.*;

publicclassShowCalendar{

Calendarcalendar=null;

intyear,dayofMonth,dayofYear,weekofYear,weekofMonth,dayofWeek,hour,minute,second;

Stringday,date,time;

//下面創(chuàng)建ShowCalendar的構造方法,根據(jù)當前的時間創(chuàng)建日期對象

publicShowCalendar(){

calendar=Calendar.getInstance();

Datetime=newDate();

calendar.setTime(time);

}

publicintgetYear(){

returncalendar.get(Calendar.YEAR);

}

publicStringgetMonth(){

intm=calendar.get(Calendar.MONTH)+1;

Stringmonths[]={"1","2","3","4","5","6","7","8","9","10","11","12"};

if(m>12)return"0";

returnmonths[m-1];

}

publicStringgetDay(){

intn=getDayofWeek();

Stringdays[]={"日","一","二","三","四","五","六"};

if(n>7)

return"星期?";

returndays[n-1];

}

publicStringgetDate(){

returngetYear()+"/"+getMonth()+"/"+getDayofMonth();

}

publicStringgetTime()

{

returngetHour()+":"+getMinute()+":"+getSecond();

}

publicintgetDayofMonth(){

returncalendar.get(Calendar.DAY_OF_MONTH);

}

publicintgetDayofYear(){

returncalendar.get(Calendar.DAY_OF_YEAR);

}

publicintgetWeekofYear(){

returncalendar.get(Calendar.WEEK_OF_YEAR);

}

publicintgetWeekofMonth(){

returncalendar.get(Calendar.WEEK_OF_MONTH);

}

publicintgetDayofWeek(){

returncalendar.get(Calendar.DAY_OF_WEEK);

}

publicintgetHour(){

returncalendar.get(Calendar.HOUR_OF_DAY);

}

publicintgetMinute(){

returncalendar.get(Calendar.MINUTE);

}

publicintgetSecond(){

returncalendar.get(Calendar.SECOND);

}

}然后編寫用useBean動作標簽調用此JavaBean的JSP(JavaBean_Calendar.jsp)文件,通過表格的形式顯示當前的時間、日期和星期,具體代碼如下:

<%@pagelanguage="java"pageEncoding="UTF-8"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<title>運用JavaBean顯示日期</title>

</head>

<body>

<jsp:useBeanid="clock"class="beans.ShowCalendar"scope="page"/>

<tableborder="4">

<tr>

<td><jsp:getPropertyname="clock"property="year"/>年</td>

<td><jsp:getPropertyname="clock"property="month"/>月

<jsp:getPropertyname="clock"property="dayofMonth"/>日

星期<jsp:getPropertyname="clock"property="day"/></td>

</tr>

<tr>

<td>當前時間為</td>

<td><jsp:getPropertyname="clock"property="time"/></td>

</tr>

<tr>

<td>今天是今年的第

</td>

<td><jsp:getPropertyname="clock"property="dayofYear"/>天

</td>

</tr>

<tr>

<td>本周是今年的第</td>

<td><jsp:getPropertyname="clock"property="weekofYear"/>周</td>

</tr>

<tr>

<td>本周是本月的第</td>

<td><jsp:getPropertyname="clock"property="weekofMonth"/>周</td>

</tr>

</table>

<jsp:getPropertyname="clock"property="date"/>

</body>

</html>

JavaBean_Calendar.jsp在JSP引擎中的運行結果如圖10-4所示。

圖10-4JavaBean_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論