一、什么是javabean
JavaBean是一個遵循特定寫法的Java類,它通常具有如下特點:
這個Java類必須具有一個無參的構造函數
屬性必須私有化。
私有化的屬性必須通過public類型的方法暴露給其它程序,并且方法的命名也必須遵守一定的命名規范。
JavaBean規范:
JavaBean在J2EE開發中,通常用于封裝數據,對于遵循以上寫法的JavaBean組件,其它程序可以通過反射技術實例化JavaBean對象,并且通過反射那些遵守命名規范的方法,從而獲知JavaBean的屬性,進而調用其屬性保存數據。
一個JavaBean由3部分組成:
(1) 屬性(properties)
JavaBean提供了高層次的屬性概念,屬性在JavaBean中不只是傳統的面向對象的概念里的屬性,它同時還得到了屬性讀取和屬性寫入的API的支持。屬性值可以通過調用適當的bean方法進行。比如,可能bean有一個名字屬性,這個屬性的值可能需要調用String getName()方法讀取,而寫入屬性值可能要需要調用void setName(String str)的方法。
每個JavaBean屬性通常都應該遵循簡單的方法命名規則,這樣應用程序構造器工具和最終用戶才能找到JavaBean提供的屬性,然后查詢或修改屬性值,對bean進行操作。JavaBean還可以對屬性值的改變作出及時的反應。比如一個顯示當前時間的JavaBean,如果改變時鐘的時區屬性,則時鐘會立即重畫,顯示當前指定時區的時間。
(2) 方法(method)
JavaBean中的方法就是通常的Java方法,它可以從其他組件或在腳本環境中調用。默認情況下,所有bean的公有方法都可以被外部調用,但bean一般只會引出其公有方法的一個子集。
由于JavaBean本身是Java對象,調用這個對象的方法是與其交互作用的唯一途徑。JavaBean嚴格遵守面向對象的類設計邏輯,不讓外部世界訪問其任何字段(沒有public字段)。這樣,方法調用是接觸Bean的唯一途徑。
但是和普通類不同的是,對有些Bean來說,采用調用實例方法的低級機制并不是操作和使用Bean的主要途徑。公開Bean方法在Bean操作中降為輔助地位,因為兩個高級Bean特性--屬性和事件是與Bean交互作用的更好方式。
因此Bean可以提供要讓客戶使用的public方法,但應當認識到,Bean設計人員希望看到絕大部分Bean的功能反映在屬性和事件中,而不是在人工調用和各個方法中。
(3) 事件(event)
Bean與其他軟件組件交流信息的主要方式是發送和接受事件。我們可以將bean的事件支持功能看作是集成電路中的輸入輸出引腳:工程師將引腳連接在一起組成系統,讓組件進行通訊。有些引腳用于輸入,有些引腳用于輸出,相當于事件模型中的發送事件和接收事件。
事件為JavaBean組件提供了一種發送通知給其他組件的方法。在AWT事件模型中,一個事件源可以注冊事件監聽器對象。當事件源檢測到發生了某種事件時,它將調用事件監聽器對象中的一個適當的事件處理方法來處理這個事件。
二、JavaBean的屬性
JavaBean的屬性可以是任意類型,并且一個JavaBean可以有多個屬性。每個屬性通常都需要具有相應的setter、 getter方法,setter方法稱為屬性修改器,getter方法稱為屬性訪問器。
屬性修改器必須以小寫的set前綴開始,后跟屬性名,且屬性名的第一個字母要改為大寫,例如,name屬性的修改器名稱為setName,password屬性的修改器名稱為setPassword。?
屬性訪問器通常以小寫的get前綴開始,后跟屬性名,且屬性名的第一個字母也要改為大寫,例如,name屬性的訪問器名稱為getName,password屬性的訪問器名稱為getPassword。?
一個JavaBean的某個屬性也可以只有set方法或get方法,這樣的屬性通常也稱之為只寫、只讀屬性。
三、在jsp中如何使用JavaBean
JSP技術提供了三個關于JavaBean組件的動作元素,即JSP標簽,它們分別為:
.<jsp:useBean>標簽:用于在JSP頁面中查找或實例化一個JavaBean組件。
<jsp:useBean>標簽用于在指定的域范圍內查找指定名稱的JavaBean對象,如果存在則直接返回該JavaBean對象的引用,如果不存在則實例化一個新的JavaBean對象并將它以指定的名稱存儲到指定的域范圍中。?
常用語法:
??? <jsp:useBean id="beanName" class="package.class" scope="page|request|session|application"/>
"id"屬性用于指定JavaBean實例對象的引用名稱和其存儲在域范圍中的名稱。
"class"屬性用于指定JavaBean的完整類名(即必須帶有包名)。
"scope"屬性用于指定JavaBean實例對象所存儲的域范圍,其取值只能是page、request、session和application等四個值中的一個,其默認值是page。
四、三大構件