JSP--JavaBean
JSP 最強(qiáng)有力的一個(gè)方面就是能夠使用 JavaBean 組件。 按照 Sun 公司的定義, JavaBean是一個(gè)可重復(fù)使用的軟件組件。實(shí)際上 JavaBean 是一種 Java 類,通過(guò)封裝屬性和方法成為具有某種功能或者處理某些業(yè)務(wù)的對(duì)象,簡(jiǎn)稱 Bean。
一個(gè)基本的 JSP 頁(yè)面由靜態(tài)的 HTML 標(biāo)簽和 Java 腳本組成,如果 Java腳本和 HTML 標(biāo)簽大量摻雜在一起,就顯得頁(yè)面混雜,不易維護(hù)。 JSP 頁(yè)面應(yīng)當(dāng)將數(shù)據(jù)的處理過(guò)程指派給一個(gè)或者幾個(gè) Bean 來(lái)完成,而在 JSP 頁(yè)面中調(diào)用 JavaBean。不提倡大量的數(shù)據(jù)處理都用 Java 腳本來(lái)完成。 JSP 頁(yè)面中調(diào)用 JavaBean,可有效地分離靜態(tài)工作部分和動(dòng)態(tài)工作部分,實(shí)現(xiàn)業(yè)務(wù)邏輯和表現(xiàn)形式的分離。 JavaBean 負(fù)責(zé)業(yè)務(wù)邏輯的處理, JSP 負(fù)責(zé)頁(yè)面的展示,如圖 5–1 所示。
JavaBean 簡(jiǎn)介
JavaBean?的特點(diǎn)
可以實(shí)現(xiàn)代碼的重復(fù)利用。
易編寫、 易維護(hù)、易使用。
可以在任何支持 Java 的平臺(tái)上工作,而不需要重新編譯。
可以通過(guò)網(wǎng)絡(luò)傳輸。
可以與其他 Java 類同時(shí)使用。
JavaBean?的應(yīng)用范圍
JavaBean 傳統(tǒng)的應(yīng)用在于可視化領(lǐng)域,如 AWT(抽象窗口工具集)和 Swing 下的應(yīng)用。現(xiàn)在, JavaBean 更多的應(yīng)用在于非可視化領(lǐng)域,它在服務(wù)器端應(yīng)用方面表現(xiàn)出了越來(lái)越強(qiáng)的生命力。非可視化的 JavaBean 和可視化的 JavaBean 同樣使用屬性和事件。非可視化的JavaBean 在 JSP 程序中常用來(lái)封裝業(yè)務(wù)邏輯、數(shù)據(jù)庫(kù)操作等,可以很好地實(shí)現(xiàn)業(yè)務(wù)邏輯和前臺(tái)頁(yè)面的分離,使得系統(tǒng)具有更好的健壯性和靈活性。注意: JavaBean 和 EJB( Enterprise JavaBean)的概念是完全不同的。
編寫?JavaBean?遵循的原則
編寫 JavaBean 就是編寫一個(gè) Java 的類,所以只要學(xué)會(huì)寫類就能編寫一個(gè) JavaBean,這個(gè)類創(chuàng)建的一個(gè)對(duì)象稱之為 JavaBean。為了讓使用 JavaBean 的應(yīng)用程序構(gòu)建工具(比如 JSP引擎)知道這個(gè) Bean 的屬性和方法, JavaBean 的類需要遵守以下規(guī)則:
1、必須具備一個(gè)零參數(shù)的構(gòu)造方法,顯式地定義這樣一個(gè)構(gòu)造方法或者省略所有的構(gòu)造方法都能滿足這項(xiàng)要求。
2、成員變量也稱為屬性, JavaBean 不應(yīng)該有公開的成員變量,使用存取方法讀取和修改屬性, 而不允許對(duì)字段直接訪問(wèn)。 屬性的名字建議以小寫英文字母開頭。
3、屬性的值通過(guò) getXxx()和 setXxx()方法來(lái)訪問(wèn)。如果類有 String 類型的屬性 title,讀取 title 的方法是返回 String 的 getTitle(), 修改 title 的方法是 setTitle(String title)。
4、布爾型的屬性的讀取方法可以使用 getXxx(),也可以使用 isXxx()。
5、JavaBean 需要聲明在包里面, package 保留字給類起一個(gè)包名。
舉個(gè)例子:
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 頁(yè)面中可以<jsp:useBean>動(dòng)作元素在 JSP 頁(yè)面中使用 JavaBean 對(duì)象,這樣就可以將大部分業(yè)務(wù)處理邏輯封裝在 JavaBean
<jsp:useBean>動(dòng)作元素用來(lái)在 JSP 頁(yè)面中獲取或者創(chuàng)建一個(gè) JavaBean 對(duì)象,并指定它的名字和作用范圍。 JSP 容器確保 JavaBean 對(duì)象在指定的范圍內(nèi)可以使用。 <jsp:useBean>的語(yǔ)法格式如下:
<jsp:useBean id="beanName" class="package.BeanClassName"?scope="page | request | session | application"/>
當(dāng)服務(wù)器上某個(gè)含有<jsp:useBean>動(dòng)作元素的 JSP 頁(yè)面被加載執(zhí)行時(shí), JSP 引擎首先根據(jù) ID 給出的 JavaBean 的名字( beanName),在 scope 范圍對(duì)應(yīng)的 JSP 內(nèi)部對(duì)象上查找是否有這個(gè)名字的屬性( Attribute)。如果在指定范圍內(nèi)找到了與 beanName 同名的屬性, JSP 引擎返回屬性對(duì)應(yīng)的對(duì)象的引用。如果沒有在指定的范圍內(nèi)找到與 beanName 同名的屬性, JSP引擎根據(jù) class 屬性給出的包名和類名,創(chuàng)建一個(gè)該類的對(duì)象, 并將該對(duì)象作為屬性名為beanName 的一個(gè)屬性的值,綁定到 scope 范圍對(duì)應(yīng)的 JSP 內(nèi)部對(duì)象上。由于 pageContext對(duì)象可以操作各個(gè)范圍的屬性,實(shí)際上 JavaBean 的查找和綁定都是通過(guò) pageContext 對(duì)象來(lái)完成的。 如果沒有指定 JavaBean 的范圍,默認(rèn)范圍是 page。
實(shí)戰(zhàn)一下:
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>動(dòng)作元素用來(lái)設(shè)置 JavaBean 的簡(jiǎn)單屬性和索引屬性。 <jsp:setProperty>使用 JavaBean 的 setter 方法設(shè)置一個(gè)或多個(gè)屬性的值。
<jsp:setProperty>可以使用 value 給出屬性的取值, 取值可以是一個(gè)字符串,也可以是一個(gè) JSP 表達(dá)式( <%= %>)。
<jsp:setProperty name="beanName" property="propertyName" value="propertyValue"/>
實(shí)戰(zhàn):
創(chuàng)建javabean對(duì)象
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;} }
創(chuàng)建form表單放在index.jsp中
<form action="student.jsp" method="post"><p>學(xué)號(hào): <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>動(dòng)作元素用來(lái)訪問(wèn)一個(gè) JavaBean 的屬性。訪問(wèn)的屬性值將被轉(zhuǎn)化成字符串,然后發(fā)送到輸出流中。如果屬性是一個(gè)對(duì)象,將調(diào)用該對(duì)象的 toString()方法。<jsp:getProperty>動(dòng)作元素是通過(guò)調(diào)用 JavaBean 的 getter 方法獲取屬性的。
<jsp:getProperty name="beanName" property="propertyName"/>
注意: <jsp:getProperty>使用 name 屬性給出 JavaBean 的名字,而<jsp:useBean>使用 id 屬性給出 JavaBean 的名字,實(shí)際上它們是一致的,都是指綁定在特定范圍對(duì)象的一個(gè)屬性( Attribute)的名字。
實(shí)戰(zhàn)一下:
創(chuàng)建JavaBean對(duì)象
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頁(yè)面中對(duì)其操作
<body><!-- 實(shí)例化Book對(duì)象 --><jsp:useBean id="book" class="com.lyq.Book"></jsp:useBean><!-- 對(duì)Book對(duì)象賦值 --><jsp:setProperty name="book" property="bookName" value="《JAVA程序設(shè)計(jì)標(biāo)準(zhǔn)教程》"/><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">價(jià) 格:</td><td><jsp:getProperty name="book" property="price"/> </td></tr></table></body>
?
轉(zhuǎn)載于:https://www.cnblogs.com/wuyudong/p/jsp--javabean.html
總結(jié)
以上是生活随笔為你收集整理的JSP--JavaBean的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。