Version 4 (modified by waue, 14 years ago) (diff) |
---|
整合 jsp + servlet + javabean
eclipse
重點
JSP、Servlet 與 JavaBean? 的組合應用
- JavaBeans? 只是普通的類別
Servlet 的 Java 類別是繼承自 javax.servlet.HttpServlet?,因此具有接收 HTTP request 和送出 HTTP response 等網站應用程式的基本功能, 而 JavaBeans? 則只是單純的類別,它可以繼承自任何類別,但無法處理 HTTP 訊息,它在網站應用程式中的角色通常是作為參數物件(在 JSP 和 servlet 之間傳遞, 以共享資訊)或工具類別,作為參數物件時,通常代表種資料,因此被稱為 value bean,作為工具類別時,則稱為 utility bean。
- 怎樣的類別可以稱為 JavaBeans??
只要你遵守 JavaBeans? 規範中所建議的命名和設計慣例,而且你以 bean 的方式使用它,那麼它就可以稱為一個 bean。
- JSP 如何使用 JavaBeans??
要讓 JSP 能夠使用你的 bean,你的 bean 必須提供一組屬性,JSP 便可以透過特殊的標籤來存取這個 bean 的屬性。所謂的屬性,其實是一組 getter 和 setter methods
public class EmployeeBean { private int age; public int getAge() { return age; } public void setAge(int age) { self.age = age; } }
<jsp:useBean id="emp" class="com.huanlin.EmployeeBean" scope="request"/> <jsp:setProperty name="emp" property="age" value="25" /> 員工的年齡是: <jsp:getProperty name="emp" property="age" />
其中
- <jsp:useBean> 標籤就是指明要使用一個 bean 物件,id 代表該物件的名稱,class 指明了要使用什麼類別的 bean,scope 則代表物件的生命週期。
- <jsp:setProperty> 標籤用來設定 bean 的屬性值,property 指明了要設定哪個屬性,value 就是數值,要別注意的是,HTML 表單傳入的資料一定是字串,但我們的 age 屬性卻是整數,這個部分的轉換會由 Web container 幫我們處理掉。
- <jsp:getProperty> 標籤是用來取得 bean 的屬性值。
請特別注意兩點:
- 屬性的大小寫。在 JSP 裡面,屬性的名稱是完全小寫的 "age",但是 getter 和 setter methods 的名稱卻是 getAge() 和 setAge(),這種名稱的轉換對應規則是固定的,照這個規則來命名,Web container 就能夠找到正確的存取方法。
- 對於 OOP 觀念不熟的人來說,可能會誤以為在 JSP 裡面存取的 "age" 屬性,就是類別定義裡面的那個宣告為 private 成員(age),其實兩者只有字面上相同而已,實際運作是可以毫無關聯的,因為 JSP 完全是透過 getter 和 setter 方法來存取屬性,況且外界本來就無法存取類別的私有成員。
- 作者給的原始碼,其中判斷質數的範例可以 work ,而其他跟 servlet 溝通的範例則永遠都顯示 "從 servlet 傳來的訊息: null " ,與作者要印出的hello world 有出入
參考