版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、9.9.1 1 組件技術組件技術9.9.5 JavaBean5 JavaBean的基本概念的基本概念9.9.2 JavaBean2 JavaBean的任務的任務9.9.3 JavaBean3 JavaBean的主要設計目標的主要設計目標9.9.4 JavaBean4 JavaBean與與JavaJava9.9.6 6 在在JSPJSP中使用中使用JavaBeanJavaBean9.9.1 1 組件技術組件技術 Java的Bean是一個可以復用的軟件模型。一般來說,Bean可以為簡單的GUI,可以是按鈕組件、游標、菜單等。這些是Bean的直觀方法。在JSP中所用的JavaBean,一般以不可見的
2、組件為主。9.9.2 JavaBean2 JavaBean的任務的任務 JavaBean的任務是它能夠在包括應用程序、其他組件、文檔、 Web站點和應用程序構造器工具的多種方案中再利用。9.3 JavaBean9.3 JavaBean的主要設計目標JavaBean的主要設計目標:緊湊而方便地創(chuàng)建和使用;完全的可移植性;繼承Java的強大功能;支持可擴展的設計過程組件編輯器;提高分布計算機制的強壯性;9.9.4 JavaBean4 JavaBean與與JavaJava Java能夠為用戶創(chuàng)建可重用的對象,但它卻沒有管理這些對象相互作用的規(guī)律或標準。 JavaBean通過指定定義對象之間交互作用的
3、機制,以及大部分對象需要支持的常用行為,如持久性和實際處理等,建立了自己需要的組件模型。9.9.5 JavaBean5 JavaBean的基本概念的基本概念9.5.1 什么是JavaBean9.5.2 屬性、 事件和方法9.5.3 JavaBean示例程序9.5.1 9.5.1 什么是什么是JavaBeanJavaBean JavaBean是可復用的平臺獨立的軟件組件,開發(fā)者可以在軟件構造器工具中對其直接進行可視化操作。 JavaBean必須支持以下特征:支持自檢,這樣構造器工具才能分析bean是如何工作的。支持定制,這樣用戶才能使用應用程序構造器工具定制bean的外觀和行為。支持事件,這樣b
4、ean才能與外部進行通訊。支持屬性,這樣bean才能具有內部的狀態(tài),以便定制應用和編寫應用。支持持久性,這樣bean才能在應用程序構造器工具定制,并將定制的狀態(tài)存儲起來以便隨時使用。9.5.1 9.5.1 什么是什么是JavaBeanJavaBean 可視化的JavaBean必須繼承的類是java.awt.Component,這樣它們才能添加到可視化容器中去,非可視化JavaBean則不需要繼承這個類。 JavaBean比較適合于那些具有可視化操作和定制特性的軟件組件。9.5.2 9.5.2 屬性、事件和方法屬性、事件和方法 JavaBean可以看作是一個黑盒子,即只需要知道其功能而不必管其內
5、部結構的軟件設備。 作為一個黑盒子的模型, JavaBean有3個接口面,可以獨立進行開發(fā):1. JavaBean可以調用的方法。2. JavaBean提供的可讀寫的屬性。3. JavaBean向外部發(fā)送的或從外部接收的事件。9.5.2 9.5.2 屬性、事件和方法屬性、事件和方法一.方法二.屬性三.事件一.方法 JavaBean中的方法就是通常的Java方法,它可以從其他組件或腳本環(huán)境中調用。默認情況下,所有Bean的公有 (public)方法都可以被外部調用,但Bean一般只會引出其公有方法的一個子集。外界不可能訪問類中的任何非公有字段。JavaBean的另外兩個更為高級的JavaBean
6、特征 屬性和事件,成為了與JavaBean進行交互的更好手段。二.屬性 JavaBean提供了高層次的屬性(properties)概念。 JavaBean的屬性是與bean的內部狀態(tài)有關的命名的性質,屬性的值可以通過調用適當的bean方法進行讀寫。 每個JavaBean屬性通常都應該遵循一定的命名規(guī)則,這樣應用程序構造器工具和最終用戶才能找到JavaBean提供的屬性,然后查詢或修改屬性值,對JavaBean進行操作。二.屬性 在JavaBean的設計中,按照屬性的不同作用細分為四類:Simple,Indexed,Bound與Constrained屬性。1.Simple屬性 一個簡單屬性表示一
7、個伴隨有一對get/set方法的類變量。屬性名與和該屬性相關的get/set方法名對應。例如,如果有setX()和getX()方法,則暗指有一個名為X的屬性。如果有一個方法名為isX,則通常暗指X是一個布爾屬性(即X的值為true或false)。 例:10.1二.屬性 public class alden1 extends Canvas string ourString= Hello; /屬性名為ourString,類型為字符串public alden1() /alden1()是alden1的構造函數,與C+中構造函數的意義相同setBackground(Color.red);setForeg
8、round(Color.blue);/* set屬性*/public void setourString(String newString) ourString=newString;/* get屬性 */public String getourString() return ourString;二.屬性2.Indexed屬性 一個Indexed屬性表示一個數組值。使用與該屬性對應的get/set方法可取得數組中的數值。該屬性也可以一次設置或取得整個數組的值。例:10.2二.屬性 public class alden2 extends Canvas int dataSet=1,2,3,4,5,6
9、; / dataSet是一個indexed屬性public alden2() setBackground(Color.red);setForeground(Color.blue);/* 設置整個數組*/public void setDataSet(int x)dataSet=x;/* 設置數組中的單個元素值 */ public void setDataSet(int index, int x)dataSetindex=x;二.屬性 /* 取得整個數組值 */public int getDataSet()return dataSet;/* 取得數組中的指定元素值 */public int get
10、DataSet(int x)return dataSetx;二.屬性3.Bound屬性 一個Bound屬性是指當該種屬性的值發(fā)生變化時,要通知其它的對象的屬性。每次屬性值改變時,就觸發(fā)一個PropertyChange事件(在Java程序中,事件也是一個對象)。事件中封裝了屬性名、屬性的原值、屬性變化后的新值。這種事件通過JavaBeans的事件機制傳遞到其它的JavaBean,至于接收事件的Bean應做什么動作由其自己定義。 例:10.3二.屬性public class alden3 extends CanvasString ourString= Hello;/ourString是一個boun
11、d屬性private PropertyChangeSupport changes = new PropertyChangeSupport(this); public void setString(string newString) String oldString = ourString; ourString = newString; /* ourString的屬性值已發(fā)生變化,于是接著點火屬性改變事件 */ changes.firePropertyChange(ourString,oldString,newString);public String getString()return our
12、String;二.屬性 public void addPropertyChangeListener(PropertyChangeLisener l)changes.addPropertyChangeListener(l);public void removePropertyChangeListener(PropertyChangeListener l)changes.removePropertyChangeListener(l);二.屬性 /* 注:Java是純面向對象的語言,如果要使用某種方法則必須指明是要使用哪個對象的方法,程序中要進行點火事件的操作,這種操作所使用的方法是在Propert
13、yChangeSupport類中的。所以上面聲明并實例化了一個changes對象,在下面將使用changes的firePropertyChange方法來點火ourString的屬性改變事件。*/ /* 我們不能預知alden3將與哪些其它的Bean組合成為一個應用,無法預知若alden3的ourString屬性發(fā)生變化時有哪些其它的組件與此變化有關,因而alden3這個Bean要預留出一些接口給開發(fā)工具,開發(fā)工具使用這些接口,把其它的JavaBean對象與alden3掛接。*/ 二.屬性4.Constrained屬性 一個JavaBean的Constrained屬性,是指當這個屬性的值發(fā)生變化
14、時,與這個屬性已建立了某種連接的其它Java對象可否決屬性值的改變。 Constrained屬性的監(jiān)聽者通過拋出PropertyVetoException異常來阻止該屬性的改變。 例:10.4二.屬性public class JellyBean extends Canvasp r i v a t e P r o p e r t y C h a n g e S u p p o r t c h a n g e s = n e w PropertyChangeSupport(this);p r i v a t e Ve t o a b l e C h a n g e S u p p o r t Ve
15、 t o s = n e w VetoableChangeSupport(this); public void setPriceInCents(int newPriceInCents) throws PropertyVetoException int oldPriceInCents=ourPriceInCents;vetos.fireVetoableChange(priceInCents,ne w Integer(OldPriceInCents), new Integer(newPriceInCents);ourPriceInCents=newPriceInCents;change s.fir
16、e Prope rtyCha nge (pric e InCe nts, ne w Integer(oldPriceInCents),new Integer(newPriceInCents);二.屬性public void addVetoableChangeListener(VetoableChangeListener l) vetos.addVetoableChangeListener(l);public void removeVetoableChangeListener(VetoableChangeListener l)vetos.removeVetoableChangeListener(
17、l); 二.屬性/*與前述changes相同,可使用VetoableChangeSupport對象的實例Vetos中的方法,在特定條件下來阻止PriceInCents值的改變。*/ /*方法名中throws PropertyVetoException的作用是當有其它Java對象否決PriceInCents的改變時,要拋出例外。*/ /* 先保存原來的屬性值*/ /*若有其它對象否決priceInCents的改變,則程序拋出例外,不再繼續(xù)執(zhí)行下面的兩條語句,方法結束。若無其它對象否決priceInCents的改變,則在下面的代碼中把ourPriceIncents賦予新值,并點火屬性改變事件*/
18、/*與前述changes相同,也要為PriceInCents屬性預留接口,使其它對象可注冊入PriceInCents否決改變監(jiān)聽者隊列中,或把該對象從中注銷 */三.事件 事件處理是JavaBean體系結構的核心之一。Bean與其他軟件組件交流信息的主要方式是發(fā)送和接受事件。 事件為JavaBean組件提供了一種發(fā)送通知給其他組件的方法。當事件源檢測到發(fā)生了某種事件時,它將調用事件監(jiān)聽器對象中的一個適當的事件處理方法來處理這個事件。這樣,不同的組件就可在構造工具內組合在一起,組件之間通過事件的傳遞進行通信,構成一個應用。 三.事件 從概念上講,事件是一種在“事件源對象”和“事件監(jiān)聽者對象“之間
19、,某種狀態(tài)發(fā)生變化的傳遞機制。在Java和JavaBean中則是定義了一個一般的、可擴充的事件機制,這種機制能夠: 三.事件對事件類型和傳遞的模型的定義和擴充提供一個公共框架,并適合于廣泛的應用。 與Java語言和環(huán)境有較高的集成度。 事件能被描述環(huán)境捕獲和觸發(fā)。 能使其它構造工具采取某種技術在設計時直接控制事件,以及事件源和事件監(jiān)聽者之間的聯系。 事件機制本身不依賴于復雜的開發(fā)工具。能夠發(fā)現指定的對象類可以生成的事件。 能夠發(fā)現指定的對象類可以觀察(監(jiān)聽)到的事件。 三.事件提供一個常規(guī)的注冊機制,允許動態(tài)操縱事件源與事件監(jiān)聽者之間的關系。 不需要其它的虛擬機和語言即可實現。 事件源與監(jiān)聽者
20、之間可進行高效的事件傳遞。 能完成JavaBean事件模型與相關的其它組件體系結構事件模型的中立映射。 三.事件1.概述 2.事件狀態(tài)對象(Event State Object) 3.事件監(jiān)聽者接口(EventListener Interface)與事件監(jiān)聽者 4.事件源類 5.事件監(jiān)聽者的注冊與注銷 1.概述 事件從事件源到監(jiān)聽者的傳遞是通過對目標監(jiān)聽者對象的Java方法調用進行的。 對每個明確的事件的發(fā)生,都相應地定義一個明確的Java方法。這些方法都集中定義在事件監(jiān)聽者(EventListener)接口中,這個接口繼承了java.util.EventListener。 實現了事件監(jiān)聽者接
21、口中一些或全部方法的類就是事件監(jiān)聽者。伴隨著事件的發(fā)生,相應的狀態(tài)通常都封裝在事件狀態(tài)對象中,該對象必須繼承自java.util.EventObject。 2.事件狀態(tài)對象(Event State Object) 與事件發(fā)生有關的狀態(tài)信息一般都封裝在一個事件狀態(tài)對象中,這種對象是java.util.EventObject的子類。在事件狀態(tài)對象中一般都包含有與事件相關的一些信息。按設計習慣,這種事件狀態(tài)對象類的名應以Event結尾。 2.事件狀態(tài)對象(Event State Object) public class MouseMovedExampleEvent extends java.util
22、.EventObject protected int x, y; /鼠標移動時的坐標位置/創(chuàng)建一個鼠標移動事件MouseMovedExampleEvent MouseMovedExampleEvent(java.awt.Component source, Point location) super(source); x = location.x; y = location.y; /獲取鼠標位置 public Point getLocation() return new Point(x, y); 3.事件監(jiān)聽者接口與事件監(jiān)聽者 由于Java事件模型是基于方法調用,因而需要一個定義并組織事件操縱方
23、法的方式。JavaBean中,事件操縱方法都被定義在繼承了java.util.EventListener類的EventListener接口中,按規(guī)定,EventListener接口的命名要以Listener結尾。任何一個類如果想操縱在EventListener接口中定義的方法都必須以實現這個接口方式進行。這個類也就是事件監(jiān)聽者。 3.事件監(jiān)聽者接口與事件監(jiān)聽者 例如: /先定義了一個鼠標移動事件對象public class MouseMovedExampleEvent extends java.util.EventObject / 在此類中包含了與鼠標移動事件有關的狀態(tài)信息 . /定義了鼠標移
24、動事件的監(jiān)聽者接口 interface MouseMovedExampleListener extends java.util.EventListener /在這個接口中定義了鼠標移動事件監(jiān)聽者所應支持的方法void mouseMoved(MouseMovedExampleEvent mme); 3.事件監(jiān)聽者接口與事件監(jiān)聽者 在接口中只定義方法名,方法的參數和返回值類型。如:上面接口中的mouseMoved方法的具體實現是在下面的EventListenerObject類中定義的。 class EventListenerObject implements MouseMovedExampleLi
25、stener public void mouseMoved(MouseMovedExampleEvent mme) . EventListenerObject就可以作為MouseMovedExampleEvent事件的監(jiān)聽者。 4.事件源類 事件源也是一個JavaBean對象。它會在一定的條件下,觸發(fā)一些事件,當有對它觸發(fā)的事件感興趣的監(jiān)聽者時,它就通過方法調用的方式通知它(它們)。這些監(jiān)聽者就能感知有事件發(fā)生了。它們可以進行一些相關的處理。一個事件源對象可以觸發(fā)一個或多個事件, 每個事件又可以有一個或多個監(jiān)聽者。 5.事件監(jiān)聽者的注冊與注銷 為了各種可能的事件監(jiān)聽者把自己注冊入合適的事件源中
26、,建立事件源與事件監(jiān)聽者間的事件流,事件源必須為事件監(jiān)聽者提供注冊和注銷的方法。事件監(jiān)聽者的注冊和注銷要使用標準的設計格式: public void add( listener); public void remove( listener);9.9.6 6 在在JSPJSP中使用中使用JavaBeanJavaBean 1. 語法jsp:useBean id=beanInstanceName scope=page | request | session | application class=package.class | type=package.class | class=package.c
27、lass type=package.class | beanName=package.class | type=package.class / | other elements 2. 例子例子 3. 描述描述 用于定位或示例一個JavaBeans組件。首先會試圖定位一個Bean實例,如果這個Bean不存在,那么就會從一個class或模版中進行示例。 為了定位或示例一個Bean,會進行以下步聚,順序如下: 3. 描述描述通過給定名字和范圍試圖定位一個Bean。 對這個Bean對象引用變量以你指定的名字命名。 如果發(fā)現了這個Bean,將會在這個變量中儲存這個引用。如果你也指定了類型,那么這個Bea
28、n也設置為相應的類型。 如果沒有發(fā)現這個Bean,將會從你指定的class中示例,并將此引用儲存到一個新的變量中去。如果這個class的名字代表的是一個模版,那么這個Bean被java.beans.Beans.instantiate示例。 如果已經示例(不是定位)了Bean,同時和中有元素,那么將會執(zhí)行其中的代碼。 3. 描述描述 元素的主體通常包含有元素,用于設置Bean的屬性值。正如上面第五步所說的,的主體僅僅只有在示例Bean時才會被執(zhí)行,如果這個Bean已經存在,能夠定位它,那么主體中的內容將不會起作用。 4. 屬性以及用法 id=beanInstanceName“ 在你所定義的范圍中
29、確認Bean的變量,你能在后面的程序中使用此變量名來分辨不同的Bean 這個變量名對大小寫敏感,必須符合你所使用的腳本語言的規(guī)定。如果這個Bean已經在別的中創(chuàng)建,那么這個id的值必須與原來的那個id值一致. 4. 屬性以及用法 scope=page | request | session | application Bean存在的范圍以及id變量名的有效范圍。缺省值是page,以下是詳細說明: page - 你能在包含元素的JSP文件以及此文件中的所有靜態(tài)包含文件中使用Bean,直到頁面執(zhí)行完畢向客戶端發(fā)回響應或轉到另一個文件為止。 request - 你在任何執(zhí)行相同請求的Jsp文件中使用
30、Bean,直到頁面執(zhí)行完畢向客戶端發(fā)回響應或轉到另一個文件為止。你能夠使用Request對象訪問Bean,比如request.getAttribute(beanInstanceName) session - 從創(chuàng)建Bean開始,你就能在任何使用相同session的Jsp文件中使用Bean.這個Bean存在于整個Session生存周期內,任何在分享此Session的Jsp文件都能使用同一Bean.注意在你創(chuàng)建Bean的Jsp文件中指令中必須指定session=true application - 從創(chuàng)建Bean開始,你就能在任何使用相同application的Jsp文件中使用Bean.這個Bean存在于整個application生存周期內,任何在分享此application的Jsp文件都能使用同一Bean. 4. 屬性以及用法 class=package.class 使用new關鍵字以及class構造器從一個class中示例一個bean.這個class不能是抽象的,必須
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現代辦公環(huán)境下的健康與舒適
- 未來的工作環(huán)境科技與舒適性的平衡
- 現代辦公環(huán)境下的智能配送技術應用實例
- 2024秋七年級數學上冊 第4章 一元一次方程4.2 解一元一次方程 3用合并同類項法解方程說課稿(新版)蘇科版001
- Unit 4 History And Traditions Reading for Writing 說課稿-2023-2024學年高中英語人教版(2019)必修第二冊
- Unit 4 Friends Forever Understanding ideas click for a friend 說課稿-2024-2025學年高中英語外研版必修第一冊
- 2024年五年級英語下冊 Unit 2 How do you come to school第1課時說課稿 譯林牛津版
- 6 魯濱遜漂流記(節(jié)選)(說課稿)-2023-2024學年語文六年級下冊統編版
- 16《夏天里的成長》(說課稿)2024-2025學年部編版語文六年級上冊001
- Unit 2 Wildlife Protection Reading and Thinking Language Focus 說課稿-2024-2025學年高一上學期英語人教版(2019)必修第二冊001
- 2024-2030年中國烘焙食品行業(yè)運營效益及營銷前景預測報告
- 2025年上半年水利部長江水利委員會事業(yè)單位招聘68人(湖北武漢)重點基礎提升(共500題)附帶答案詳解
- (2024)云南省公務員考試《行測》真題及答案解析
- 寧德時代筆試題庫
- 五年級下冊北京版英語單詞
- 康復醫(yī)院患者隱私保護管理制度
- 新課標I、Ⅱ卷 (2024-2020) 近五年高考英語真題滿分作文
- 浙江省嘉興市2023-2024學年六年級(上)期末數學試卷
- 子宮脫垂手術指南
- 沈陽理工大學《數》2022-2023學年第一學期期末試卷
- DB41T 2231-2022 水利工程生態(tài)護坡技術規(guī)范
評論
0/150
提交評論