第05章-JavaBean組件技術(shù)_第1頁(yè)
第05章-JavaBean組件技術(shù)_第2頁(yè)
第05章-JavaBean組件技術(shù)_第3頁(yè)
第05章-JavaBean組件技術(shù)_第4頁(yè)
第05章-JavaBean組件技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第5章JavaBean組件技術(shù)5.1

JavaBean簡(jiǎn)介

5.2.JavaBean屬性5.3JavaBean的作用域5.4使用JavaBean計(jì)算圓的周長(zhǎng)與面積5.1

JavaBean簡(jiǎn)介

5.1.1為什么要使用JavaBean5.1.2JavaBean的形式和要素JavaBean是使用Java語(yǔ)言描述的軟件組件模型,簡(jiǎn)單地說(shuō),它就是一個(gè)可以重復(fù)使用的Java類。JavaBean可分為可視化組件和非可視化組件,其中可視化組件包括簡(jiǎn)單的GUI元素〔例如,文本框、按鈕〕及一些報(bào)表組件等。非可視化組件是在實(shí)際開發(fā)中經(jīng)常被使用到的并且在應(yīng)用程序中起著至關(guān)重要的作用。其主要功能是用來(lái)封裝業(yè)務(wù)邏輯〔功能實(shí)現(xiàn)〕、數(shù)據(jù)庫(kù)操作〔例如,數(shù)據(jù)處理、連接數(shù)據(jù)庫(kù)〕等。返回JavaBean是Java程序的一種,所使用的語(yǔ)法和其它類似的Java程序一致。在程序中使用JavaBean具有以下優(yōu)點(diǎn):

在實(shí)際的開發(fā)過(guò)程中,通常會(huì)出現(xiàn)重復(fù)的代碼或者段落,此時(shí)就會(huì)大大降低程序的可重用性并且浪費(fèi)時(shí)間。使用JavaBean就可以大大簡(jiǎn)化程序的設(shè)計(jì)過(guò)程并且方便了其它程序的重復(fù)使用。

為什么要使用JavaBeanJavaBean在效勞器端的應(yīng)用具有非常強(qiáng)大的優(yōu)勢(shì),非可視化的JavaBean可以非常好地實(shí)現(xiàn)控制邏輯、業(yè)務(wù)邏輯、表示層之間的別離,從而大大降低了它們之間的耦合度。非可視化的JavaBean現(xiàn)在多用于后臺(tái)處理,這樣會(huì)使系統(tǒng)具有一定的靈活性?!?〕可以實(shí)現(xiàn)代碼的重復(fù)利用?!?〕易編寫、易維護(hù)、易使用?!?〕它可以壓縮在jar文件中,以更小的體積在網(wǎng)絡(luò)中應(yīng)用〔4〕完全是Java語(yǔ)言編寫,可以在任何安裝了Java運(yùn)行環(huán)境的平臺(tái)上的使用,而不需要重新編譯。返回編寫JavaBean就是編寫一個(gè)Java的類,這個(gè)類創(chuàng)立的一個(gè)對(duì)象稱做一個(gè)Bean。為了能讓使用這個(gè)bean的應(yīng)用程序構(gòu)建工具〔比方JSP引擎〕知道這個(gè)bean的屬性和方法,只需在類的方法命名上遵守以下規(guī)那么:JavaBean的形式和要素〔1〕〔1〕如果類的成員變量的名字是xxx,那么為了更改或獲取成員變量的值,即更改或獲取屬性,在類中可以使用兩個(gè)方法:●getXXX():用來(lái)獲取屬性xxx。●setXXX():用來(lái)修改屬性xxx.。〔2〕對(duì)于boolean類型的成員變量,即布爾邏輯類型的屬性,允許使用"is“代替上面的"get"和"set"?!?〕類中方法的訪問(wèn)屬性都必須是public的?!?〕類中如果有構(gòu)造方法,那么這個(gè)構(gòu)造方法也是public的并且沒(méi)有參數(shù)。JavaBean的形式和要素〔2〕JavaBean例如:importjava.io.Serializable;publicclassJavaBeanDemoimplementsSerializable{//實(shí)現(xiàn)了Serializable接口JavaBeanDemo(){}//無(wú)參的構(gòu)造方法private

intid;//私有屬性Idprivate

Stringname;//私有屬性namepublic

intgetId(){

returnId;} public

voidsetId(intid){//set()方法

this.id=id;}public

StringgetName(){//get()方法

returnname;}public

voidsetName(Stringname){

this.name=name;}}返回5.2JavaBean屬性5.2.1簡(jiǎn)單屬性5.2.2索引屬性5.2.3束縛屬性5.2.4限制屬性在JavaBean的設(shè)計(jì)中按照其屬性的不同作用可以把該Bean分為4類,分別是簡(jiǎn)單屬性設(shè)置〔Simple〕、索引屬性設(shè)置〔Indexed〕、束縛屬性設(shè)置〔Bound〕、限制屬性設(shè)置〔Constrained〕。返回簡(jiǎn)單屬性JavaBean的簡(jiǎn)單屬性〔Simple屬性〕表示為一般數(shù)據(jù)類型的變量并且getXXX()和setXXX()方法是以屬性來(lái)命名的。例如:publicclassHello{ Hello(){} //無(wú)參構(gòu)造方法

privateStringname; //定義String類型的簡(jiǎn)單屬性name

privatebooleaninfo;

publicStringgetName(){ //簡(jiǎn)單屬性的getXxx()方法

returnname; }

publicvoidsetName(Stringname){ //簡(jiǎn)單屬性的setXxx()方法

this.name=name; }

publicbooleanisInfo(){ //布爾類型的取值方法

returninfo; }

publicvoidsetInfo(booleaninfo){ //布爾類型的setXxx方法

this.info=info;}}

返回索引屬性JavaBean的索引屬性〔Indexed屬性〕表示一個(gè)數(shù)組值或者一個(gè)集合,與Simple屬性一樣可以使用getXXX()和setXXX()方法來(lái)獲取值,例如:public

int[]array=new

int[8];

public

int[]getArray(){ //返回整個(gè)數(shù)組

returnarray; }

public

voidsetArray(int[]array){ //為整個(gè)數(shù)組賦值

this.array=array; }

public

voidsetArray(intindex,intvalue){ //為數(shù)組中的某個(gè)元素賦值

this.array[index]=value; }

public

intgetArray(intindex){ //返回?cái)?shù)組中的某個(gè)值

returnarray[index]; }

使用Indexed屬性除了表示數(shù)組之外,還可以表示集合類。

返回束縛屬性束縛屬性〔Bound〕也稱為關(guān)聯(lián)屬性,它是當(dāng)該種屬性的值發(fā)生變化時(shí),要通知其它的對(duì)象。每次屬性值改變時(shí),這種屬性就觸發(fā)一個(gè)PropertyChange事件(在Java程序中,事件也是一個(gè)對(duì)象)。事件中封裝了屬性名、屬性的原值、屬性變化后的新值。這種事件是傳遞到其它的Bean,至于接收事件的Bean應(yīng)做什么動(dòng)作由其自己定義。包含關(guān)聯(lián)屬性的Bean必須具有以下的功能:〔1〕允許事件監(jiān)聽器注冊(cè)和注銷與其有關(guān)的屬性修改事件;〔2〕當(dāng)修改一個(gè)關(guān)聯(lián)屬性時(shí),可以在相關(guān)的監(jiān)聽器上觸發(fā)屬性修改事件。利用java.beans.PropertyChangeSupport類創(chuàng)立出PropertyChangeSupport類的對(duì)象,從而可以用于管理注冊(cè)的監(jiān)聽器列表和屬性修改事件通知的發(fā)送。JavaBean還需要實(shí)現(xiàn)addPropertyChangeLinster()方法和removePropertyChangeLinster()方法,以便添加和取消屬性變化的監(jiān)聽器。返回限制屬性限制屬性〔constrained〕是指當(dāng)這個(gè)屬性的值要發(fā)生變化時(shí),與這個(gè)屬性已建立了某種連接的其它外部Java對(duì)象可否決該屬性值的改變〔限制屬性的監(jiān)聽者通過(guò)拋出PropertyVetoException來(lái)阻止該屬性值的改變〕,Bean本身也可以否決該Bean屬性值的改變。一個(gè)限制屬性有兩種監(jiān)聽者:屬性變化監(jiān)聽者和取消屬性改變的監(jiān)聽者。取消屬性改變的監(jiān)聽者在自己的對(duì)象代碼中有相應(yīng)的控制語(yǔ)句,在監(jiān)聽到有限制屬性要發(fā)生變化時(shí),在控制語(yǔ)句中判斷是否應(yīng)否決這個(gè)屬性值的改變。

利用java.beans.VetoableChangeSupport類的fireVetoableChange()方法傳遞屬性名稱、改變前的值和改變后的值等信息。JavaBean還需要實(shí)現(xiàn)addVetoableChangeLinster()方法和removeVetoableChangeLinster()方法,以便添加和取消屬性變化的監(jiān)聽器。注意:由于限制屬性使用了錯(cuò)誤處理,編程的時(shí)候要特別注意異常的處理方式。返回5.3JavaBean的作用域返回5.3.1page作用域5.3.2request作用域5.3.3session作用域5.3.4application作用域5.3.5JavaBean獲取作用域數(shù)據(jù)appliactionsessionpagerequestpage作用域page作用域在這4種類型中范圍是最小的,客戶端每次請(qǐng)求訪問(wèn)時(shí)都會(huì)創(chuàng)立一個(gè)JavaBean對(duì)象。JavaBean對(duì)象的有效范圍是客戶請(qǐng)求訪問(wèn)的當(dāng)前頁(yè)面文件,當(dāng)客戶執(zhí)行當(dāng)前的頁(yè)面文件完畢后JavaBean對(duì)象結(jié)束生命。在page范圍內(nèi),每次訪問(wèn)頁(yè)面文件時(shí)都會(huì)生成新的JavaBean對(duì)象,原有的JavaBean對(duì)象已經(jīng)結(jié)束生命期。返回request作用域當(dāng)scope為request時(shí),JavaBean對(duì)象被創(chuàng)立后,它將存在于整個(gè)request的生命周期內(nèi),request對(duì)象是一個(gè)內(nèi)建對(duì)象,使用它的getParameter方法可以獲取表單中的數(shù)據(jù)信息。Request范圍的JavaBean與request對(duì)象有著很大的關(guān)系,它的存取范圍除了page外,還包括使用動(dòng)作元素<jsp:include>和<jsp:forward>包含的網(wǎng)頁(yè),所有通過(guò)這兩個(gè)操作指令連接在一起的JSP程序都可以共享同一個(gè)JavaBean對(duì)象。返回session作用域返回當(dāng)scope為session時(shí),JavaBean對(duì)象被創(chuàng)立后,它將存在于整個(gè)session的生命周期內(nèi),session對(duì)象是一個(gè)內(nèi)建對(duì)象,當(dāng)用戶使用瀏覽器訪問(wèn)某個(gè)網(wǎng)頁(yè)時(shí),就創(chuàng)立了一個(gè)代表該鏈接的session對(duì)象,同一個(gè)session中的文件共享這個(gè)JavaBean對(duì)象。客戶對(duì)應(yīng)的session生命期結(jié)束時(shí)JavaBean對(duì)象的生命也結(jié)束了。在同一個(gè)瀏覽器內(nèi),JavaBean對(duì)象就存在于一個(gè)session中。當(dāng)重新翻開新的瀏覽器時(shí),就會(huì)開始一個(gè)新的session。每個(gè)session中擁有各自的JavaBean對(duì)象。application作用域返回當(dāng)scope為application時(shí),JavaBean對(duì)象被創(chuàng)立后,它將存在于整個(gè)主機(jī)或虛擬主機(jī)的生命周期內(nèi),application范圍是JavaBean的生命周期最長(zhǎng)的。同一個(gè)主機(jī)或虛擬主機(jī)中的所有文件共享這個(gè)JavaBean對(duì)象。如果效勞器不重新啟動(dòng),scope為application的JavaBean對(duì)象會(huì)一直存放在內(nèi)存中,隨時(shí)處理客戶的請(qǐng)求,直到效勞器關(guān)閉,它在內(nèi)存中占用的資源才會(huì)被釋放。在此期間,效勞器并不會(huì)創(chuàng)立新的JavaBean組件,而是創(chuàng)立源對(duì)象的一個(gè)同步拷貝,任何拷貝對(duì)象發(fā)生改變都會(huì)使源對(duì)象隨之改變,不過(guò)這個(gè)改變不會(huì)影響其它已經(jīng)存在的拷貝對(duì)象。JavaBean獲取作用域數(shù)據(jù)〔1〕通過(guò)下面的實(shí)例說(shuō)明4個(gè)作用域:首先,創(chuàng)立一個(gè)JavaBean:“Scope.java〞。packagescope;publicclassScope{ publicScope(){}//無(wú)參的構(gòu)造函數(shù)

privateintnumber=0;//初始化變量number的值為0

publicintgetNmuber(){//增加并返回變量number的值

number++;

returnnumber;}

publicvoidsetNumber(intnewNumber){

this.number=newNumber;//給變量number賦新值 }}JavaBean獲取作用域數(shù)據(jù)〔2〕然后,創(chuàng)立名稱為“scope.jsp〞的頁(yè)面文件,用來(lái)顯示JavaBean存在的范圍的具體區(qū)別。主要代碼:<body><jsp:useBeanid="pageScope"scope="page"class="scope.Scope"/><%out.println("使用page獲取的數(shù)據(jù)為:"+pageScope.getNmuber());%><jsp:useBeanid="requestScope"scope="request"class="scope.Scope"/><%out.println("使用request獲取的數(shù)據(jù)為:"+requestScope.getNmuber());%><jsp:useBeanid="sessionScope"scope="session"class="scope.Scope"/><%out.println("使用session獲取的數(shù)據(jù)為:"+sessionScope.getNmuber());%><jsp:useBeanid="applicationScope"scope="application"class="scope.Scope"/><%out.println(“使用application獲取的數(shù)據(jù)為:〞+applicationScope.getNmuber());%></body>JavaBean獲取作用域數(shù)據(jù)〔3〕程序運(yùn)行結(jié)果如圖1所示:

關(guān)閉該瀏覽器,重新翻開新的瀏覽器后的結(jié)果如圖2所示:圖1圖2返回5.4使用JavaBean計(jì)算圓的周長(zhǎng)與面積〔1〕〔1〕創(chuàng)立名稱為“Circle.java〞的JavaBean,該類文件主要實(shí)現(xiàn)了圓的數(shù)學(xué)計(jì)算操作,代碼如下:packagecircle;publicclassCircle{

privateintradius=1; //定義私有變量radius表示圓的半徑

publicCircle(){} //無(wú)參的構(gòu)造函數(shù)

publicintgetRadius() {

returnradius;//返回變量radius }

publicvoidsetRadius(intrRadius) { radius=rRadius;//給變量radius賦值 }

publicdoublecircleLength(){

returnMath.PI*radius*2.0; //計(jì)算圓的周長(zhǎng) }

publicdoublecircleArea(){

returnMath.PI*radius*radius; //計(jì)算圓的面積 }}5.4使用JavaBean計(jì)算圓的周長(zhǎng)與面積〔2〕〔2〕創(chuàng)立名稱為“radi

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論