|
對於動態網頁來說,如果它又要負責網頁內容的生成,又要負責資料的處理與保存,最後常導致的結果,就是頁面呈現與邏輯與Java程式邏輯
等混合在一起,對於必須相互合作的網頁設計與程式設計人員來說是種困擾。 JavaBean的作用之一,就是希望將Java程式邏輯處理與頁面呈現邏輯分開, 可用以實現 Model 1 架構。 JavaBean的撰寫就如一般的Java程式,首先撰寫一個簡單的Java類,其作用為尋找兩個數的最大公因數:
package onlyfun.caterpillar; 注意在JSP 2.0之後,JavaBean的類別一定要有用package加以管理; 上面這個類別所擁有的方法都是公開的,而且使用setXXX()與getXXX() 的方式來命名(稱之為Setter與Getter)。 將這個類別編譯完成後,*.class放置於Web應用程的WEB-INF/classes/資料夾中,由於設定 package為onlyfun.caterpillar,所以最後*.class應該路徑應該是WEB- INF/classes/onlyfun/caterpillar/GCDBean.class,接下來在JSP網頁中將這個類別當作 JavaBean來使用,撰寫以下這個JSP網頁程式:
<%@page contentType="text/html; charset=Big5"%> <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()方法取得值。 可以實作一個表單來發送參數資料給上面這個JSP網頁:
<html> 連接上這個表單,並輸入適當的數字,在送出資料後,您就可以看到所計算完畢的GCD值。 如上所示的,使用JavaBean,您可以將部份的程式邏輯移至JavaBean中,而不用在JSP網頁中直接撰寫程式邏輯,只要在 JSP網頁中使用<jsp:useBean>、<jsp:setProperty>與<jsp: getProperty>等標籤,標籤的使用在HTML網頁中對網頁設計人員來說比較友善,不會帶有太多的程式邏輯部份,可以實現「部份」視圖 與邏輯分離的目的(畢竟,僅靠JavaBean要達到完全的分離仍有其限制)。 要注意的是,每當您的JavaBean程式內容改變並重新編譯後,容器不一定會知道JavaBean的內容已經改變,也就不會重新載入改變後新的類別,您要重新啟動容器,讓容器重新載入改變後的JavaBean,如果是在測試階段,您可以設定容器自動偵測類 別是否已經改變,並讓容器自動載入改變後的類別,您可以參考 關於讓Tomcat 5.0自動Reload Servlet。 對於JavaBean,您必須知道幾個規則:
這邊先簡單的介紹如何撰寫一個簡單的JavaBean,JavaBean的擺放,以及如何在JSP網頁中使用它們,至於<jsp: useBean>、<jsp:setProperty>與<jsp:getProperty>等標籤的更多用法,以及 JavaBean的更多應用與作用範圍,將在之後的主題中作更多的介紹。 |