JSP--JavaBean,jsp使用javabean
JSP 最強有力的一個方面就是能夠使用 JavaBean 組件。 按照 Sun 公司的定義, JavaBean是一個可重複使用的軟體組件。實際上 JavaBean 是一種 Java 類,通過封裝屬性和方法成為具有某種功能或者處理某些業務的對象,簡稱 Bean。
一個基本的 JSP 頁面由靜態 HTML 標籤和 Java 指令碼組成,如果 Java指令碼和 HTML 標籤大量摻雜在一起,就顯得頁面混雜,不易維護。 JSP 頁面應當將資料的處理過程指派給一個或者幾個 Bean 來完成,而在 JSP 頁面中調用 JavaBean。不提倡大量的資料處理都用 Java 指令碼來完成。 JSP 頁面中調用 JavaBean,可有效地分離靜態工作部分和動態工作部分,實現商務邏輯和表現形式的分離。 JavaBean 負責商務邏輯的處理, JSP 負責頁面的展示, 5–1 所示。
JavaBean 簡介
JavaBean 的特點
可以實現代碼的重複利用。
易編寫、 易維護、易使用。
可以在任何支援 Java 的平台上工作,而不需要重新編譯。
可以通過網路傳輸。
可以與其他 Java 類同時使用。
JavaBean 的應用範圍
JavaBean 傳統的應用在於可視化領域,如 AWT(抽象視窗工具集)和 Swing 下的應用。現在, JavaBean 更多的應用在於非可視化領域,它在伺服器端應用方面表現出了越來越強的生命力。非可視化的 JavaBean 和可視化的 JavaBean 同樣使用屬性和事件。非可視化的JavaBean 在 JSP 程式中常用來封裝商務邏輯、資料庫操作等,可以很好地實現商務邏輯和前台頁面的分離,使得系統具有更好的健壯性和靈活性。注意: JavaBean 和 EJB( Enterprise JavaBean)的概念是完全不同的。
編寫
JavaBean 遵循的原則
編寫 JavaBean 就是編寫一個 Java 的類,所以只要學會寫類就能編寫一個 JavaBean,這個類建立的一個對象稱之為 JavaBean。為了讓使用 JavaBean 的應用程式構建工具(比如 JSP引擎)知道這個 Bean 的屬性和方法, JavaBean 的類需要遵守以下規則:
1、必須具備一個零參數的構造方法,顯式地定義這樣一個構造方法或者省略所有的構造方法都能滿足這項要求。
2、成員變數也稱為屬性, JavaBean 不應該有公開的成員變數,使用存取方法讀取和修改屬性, 而不允許對欄位直接存取。 屬性的名字建議以小寫英文字母開頭。
3、屬性的值通過 getXxx()和 setXxx()方法來訪問。如果類有 String 類型的屬性 title,讀取 title 的方法是返回 String 的 getTitle(), 修改 title 的方法是 setTitle(String title)。
4、布爾型的屬性的讀取方法可以使用 getXxx(),也可以使用 isXxx()。
5、JavaBean 需要聲明在包裡面, package 保留字給類起一個包名。
舉個例子:
package com.wuyudong; public class User { private String userName; private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
訣竅: Eclipse 可以協助我們產生 getter 和 setter 方法,右鍵 Source→ Generate Getters and Setters
<jsp:useBean>
JSP 頁面中可以<jsp:useBean>動作元素在 JSP 頁面中使用 JavaBean 對象,這樣就可以將大部分業務處理邏輯封裝在 JavaBean
<jsp:useBean>動作元素用來在 JSP 頁面中擷取或者建立一個 JavaBean 對象,並指定它的名字和作用範圍。 JSP 容器確保 JavaBean 對象在指定的範圍內可以使用。 <jsp:useBean>的文法格式如下:
<jsp:useBean id="beanName" class="package.BeanClassName" scope="page | request | session | application"/>
當伺服器上某個含有<jsp:useBean>動作元素的 JSP 頁面被載入執行時, JSP 引擎首先根據 ID 給出的 JavaBean 的名字( beanName),在 scope 範圍對應的 JSP 內部對象上尋找是否有這個名字的屬性( Attribute)。如果在指定範圍內找到了與 beanName 同名的屬性, JSP 引擎返回屬性對應的對象的引用。如果沒有在指定的範圍內找到與 beanName 同名的屬性, JSP引擎根據 class 屬性給出的包名和類名,建立一個該類的對象, 並將該對象作為屬性名稱為beanName 的一個屬性的值,綁定到 scope 範圍對應的 JSP 內部對象上。由於 pageContext對象可以操作各個範圍的屬性,實際上 JavaBean 的尋找和綁定都是通過 pageContext 對象來完成的。 如果沒有指定 JavaBean 的範圍,預設範圍是 page。
實戰一下:
JavaBean
package com.wuyudong; public class Bean { private String name; public String getName() { return name + " 的JavaBean程式!"; } public void setName(String name) { this.name = name; }}
index.jsp
<jsp:useBean id="bean" class="com.wuyudong.Bean"></jsp:useBean><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <% bean.setName("wuyudong"); %> <h1 align="center"><%=bean.getName()%></h1></body></html><jsp:setProperty>
<jsp:setProperty>動作元素用來設定 JavaBean 的簡單屬性和索引屬性。 <jsp:setProperty>使用 JavaBean 的 setter 方法設定一個或多個屬性的值。
<jsp:setProperty>可以使用 value 給出屬性的取值, 取值可以是一個字串,也可以是一個 JSP 運算式( <%= %>)。
<jsp:setProperty name="beanName" property="propertyName" value="propertyValue"/>
實戰:
建立javabean對象
package com.wuyudong; public class Student { private int id; private int age; private String classes; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getClasses() { return classes; } public void setClasses(String classes) { this.classes = classes; }}
建立form表單放在index.jsp中
<form action="student.jsp" method="post"> <p> 學號: <input type="text" name="id"> </p> <p> 年齡: <input type="text" name="age"> </p> <p> <input type="submit" value="提交"> <input type="reset" value="重 置"> </p> </form>
<jsp:getProperty>
<jsp:getProperty>動作元素用來訪問一個 JavaBean 的屬性。訪問的屬性值將被轉化成字串,然後發送到輸出資料流中。如果屬性是一個對象,將調用該對象的 toString()方法。<jsp:getProperty>動作元素是通過調用 JavaBean 的 getter 方法擷取屬性的。
<jsp:getProperty name="beanName" property="propertyName"/>
注意: <jsp:getProperty>使用 name 屬性給出 JavaBean 的名字,而<jsp:useBean>使用 id 屬性給出 JavaBean 的名字,實際上它們是一致的,都是指綁定在特定範圍對象的一個屬性( Attribute)的名字。
實戰一下:
建立JavaBean對象
package com.wuyudong; public class Book { private String bookName; private String author; private String category; private double price; public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; }}
在index.jsp頁面中對其操作
<body> <!-- 執行個體化Book對象 --> <jsp:useBean id="book" class="com.lyq.Book"></jsp:useBean> <!-- 對Book對象賦值 --> <jsp:setProperty name="book" property="bookName" value="《JAVA程式設計標準教程》"/> <jsp:setProperty name="book" property="author" value="科技"/> <jsp:setProperty name="book" property="category" value="Java圖書"/> <jsp:setProperty name="book" property="price" value="59.00"/> <table align="center" border="1" cellpadding="1" width="350" height="100" bordercolor="green"> <tr> <td align="right">圖書名稱:</td> <td><jsp:getProperty name="book" property="bookName"/> </td> </tr> <tr> <td align="right">作 者:</td> <td><jsp:getProperty name="book" property="author"/> </td> </tr> <tr> <td align="right">所屬類別:</td> <td><jsp:getProperty name="book" property="category"/> </td> </tr> <tr> <td align="right">價 格:</td> <td><jsp:getProperty name="book" property="price"/> </td> </tr> </table> </body>