什么是JavaBean

来源:互联网 发布:达内科技 php培训 编辑:程序博客网 时间:2024/06/06 01:03

转自:http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=978

其他参考:

http://en.wikibooks.org/wiki/Java_Programming/JavaBeans

http://journals.ecs.soton.ac.uk/java/tutorial/beans/whatis/


資料來源:Servlet/JSP 討論區作者:良葛格

從Java語言的角度來看,JavaBean是一個純綷的Java類別,它遵守一些規則與命名方式,例如它是一個公開
的類別,具有公開的setter與getter方法,支援事件處理等等,JavaBean是一個可重用的元件,可用於設計
使用者介面元件,或是運用於JSP網頁中邏輯處理與資料攜帶。

對於動態網頁來說,如果它又要負責網頁內容的生成,又要負責資料的處理與保存,最後常導致的結果就是頁面
呈現的部份與程式的邏輯處理,以及資料物件的處理等混合在一起,對於必須相互合作的網頁設計人員與
程式設計人員來說都是一種困擾,JavaBean的作用之一,就是希望將程式的邏輯處理與呈現部份分開,
對於JSP的設計人員來說,應儘量利用JavaBean等技術(也就是還有其它的技術)來分離程式與網頁的呈現。

JavaBean的撰寫就如一般的Java程式,我們先撰寫一個簡單的Java類,其作用為尋找兩個數的最大公因數:

package beantools.math;public class FindGCD {       private int m, n;       public void setM(int m)    {              this.m = m;       }       public void setN(int n)    {              this.n = n;       }       public int getGCD()    {              int r = 0;              while(n != 0)       {                     r = m % n;                     m = n;                     n = r;              }              return m;       }}

注意在JSP 2.0之後,JavaBean的類別一定要有package加以管理;上面這個類別所擁有的方法都是公開的,
而且使用setXXX()與getXXX()的方式來命名,將這個類別編譯完成後,您將類別*.class放置於Web應用程式
的WEB-INF/classes/資料夾中,注意由於我們設定package為beantools.math,所以最後您的*.class
應該路徑應該是WEB-INF/classes/beantools/math/FindGCD.class,接下來我們在JSP網頁中將這個類別
當作JavaBean來使用,我們撰寫以下這個JSP網頁程式:

<jsp:useBean id="gcd" class="beantools.math.FindGCD" /><jsp:setProperty name="gcd" property="*" /><%= request.getParameter("m") %> 與 <%= request.getParameter("n") %>最大公因數:<jsp:getProperty name="gcd" property="GCD" />

<jsp:useBean>標籤是用來呼叫JavaBean的方法,id用於指定JavaBean實例的參考名稱,它實際將轉換為
Servlet中的一個物件參考名稱,class用以指定您的JavaBean將實例化哪一個類別,在執行JSP網頁時,
它會檢查JavaBean的實例是否已經存在,如果不存在,則實例化一個JavaBean。

<jsp:setProperty>標籤用於給JavaBean設定屬性值,name用於指定您要使用哪一個參考名稱所參考至的
JavaBean實例;在屬性設定時我們使用了introspection機制,在property設定"*",表示將自動尋找
request中符合JavaBean中setter名稱的參數值,即如果request的參數名稱若符合setXXX()中XXX名稱,
則將request中對應的值設定給setXXX()。

<jsp:getProperty>則用來取得JavaBean所攜帶的屬性值,name用於指定您要使用哪一個參考名稱所參考至
的JavaBean實例,在property中指定的是要哪一個屬性值,即如果指定為XXX,則使用getXXX()方法取得值。
我們直接在網址列上發送以下的訊息即可求得最大公因數:

http://localhost:8080/myjsp/javabeandemo.jsp?m=100&n=14

所傳回的內容如下:

100 與 14 最大公因數:2

如上所示的,使用JavaBean,我們可以將部份的程式邏輯移至JavaBean中,而不用在JSP網頁中直接撰寫程式
邏輯,只要在JSP網頁中使用<jsp:useBean>、<jsp:setProperty>與<jsp:getProperty>等標籤,標籤的
使用在HTML網頁中比較直觀,不會帶有太多的程式邏輯部份,可以實現「部份的」視圖與邏輯分離的目的
(僅靠JavaBean要達到完全的分離仍有困難)。 
要注意的是,每當您的JavaBean程式內容改變並重新編譯後,Container不一定會知道JavaBean的內容已經
改變,也就不會重新載入改變後新的類別,這是使用JavaBean的缺點之一,解決的方法就是重新啟動
Container,讓Container重新載入改變後的JavaBean。