從Java語言的角度來看,JavaBean是一個純綷的Java類別,它遵守一些規則與命名方式,例如它是一個公開
的類別,具有公開的setter與getter方法,支援事件處理等等,JavaBean是一個可重用的元件,可用於設計
使用者介面元件,或是運用於JSP網頁中邏輯處理與資料攜帶。
對於動態網頁來說,如果它又要負責網頁內容的生成,又要負責資料的處理與保存,最後常導致的結果就是頁面
呈現的部份與程式的邏輯處理,以及資料物件的處理等混合在一起,對於必須相互合作的網頁設計人員與
程式設計人員來說都是一種困擾,JavaBean的作用之一,就是希望將程式的邏輯處理與呈現部份分開,
對於JSP的設計人員來說,應儘量利用JavaBean等技術(也就是還有其它的技術)來分離程式與網頁的呈現。
JavaBean的撰寫就如一般的Java程式,我們先撰寫一個簡單的Java類,其作用為尋找兩個數的最大公因數:
注意在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>標籤是用來呼叫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()方法取得值。
我們直接在網址列上發送以下的訊息即可求得最大公因數:
[code]
http://localhost:8080/myjsp/javabeandemo.jsp?m=100&n=14
[/code]
所傳回的內容如下:
[code]
100 與 14 最大公因數:2
[/code]
如上所示的,使用JavaBean,我們可以將部份的程式邏輯移至JavaBean中,而不用在JSP網頁中直接撰寫程式
邏輯,只要在JSP網頁中使用<jsp:useBean>、<jsp:setProperty>與<jsp:getProperty>等標籤,標籤的
使用在HTML網頁中比較直觀,不會帶有太多的程式邏輯部份,可以實現「部份的」視圖與邏輯分離的目的
(僅靠JavaBean要達到完全的分離仍有困難)。
要注意的是,每當您的JavaBean程式內容改變並重新編譯後,Container不一定會知道JavaBean的內容已經
改變,也就不會重新載入改變後新的類別,這是使用JavaBean的缺點之一,解決的方法就是重新啟動
Container,讓Container重新載入改變後的JavaBean。
ref :
[url]http://www.javaworld.com.tw/jute/post/view?bid=6&id=52686&sty=1&tpg=1&age=-1[/url]
的類別,具有公開的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()方法取得值。
我們直接在網址列上發送以下的訊息即可求得最大公因數:
[code]
http://localhost:8080/myjsp/javabeandemo.jsp?m=100&n=14
[/code]
所傳回的內容如下:
[code]
100 與 14 最大公因數:2
[/code]
如上所示的,使用JavaBean,我們可以將部份的程式邏輯移至JavaBean中,而不用在JSP網頁中直接撰寫程式
邏輯,只要在JSP網頁中使用<jsp:useBean>、<jsp:setProperty>與<jsp:getProperty>等標籤,標籤的
使用在HTML網頁中比較直觀,不會帶有太多的程式邏輯部份,可以實現「部份的」視圖與邏輯分離的目的
(僅靠JavaBean要達到完全的分離仍有困難)。
要注意的是,每當您的JavaBean程式內容改變並重新編譯後,Container不一定會知道JavaBean的內容已經
改變,也就不會重新載入改變後新的類別,這是使用JavaBean的缺點之一,解決的方法就是重新啟動
Container,讓Container重新載入改變後的JavaBean。
ref :
[url]http://www.javaworld.com.tw/jute/post/view?bid=6&id=52686&sty=1&tpg=1&age=-1[/url]