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

下載本文檔

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

文檔簡介

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

JavaBean簡介

5.2.JavaBean屬性5.3JavaBean的作用域5.4使用JavaBean計算圓的周長與面積5.1

JavaBean簡介

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

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

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

privateStringname; //定義String類型的簡單屬性name

privatebooleaninfo;

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

returnname; }

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

this.name=name; }

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

returninfo; }

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

this.info=info;}}

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

int[]array=new

int[8];

public

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

returnarray; }

public

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

this.array=array; }

public

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

this.array[index]=value; }

public

intgetArray(intindex){ //返回數(shù)組中的某個值

returnarray[index]; }

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

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

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

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

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

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

publicintgetRadius() {

returnradius;//返回變量radius }

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

publicdoublecircleLength(){

returnMath.PI*radius*2.0; //計算圓的周長 }

publicdoublecircleArea(){

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

溫馨提示

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

評論

0/150

提交評論