目前,Jsp作為一個(gè)很好的動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)語(yǔ)言得到了越來(lái)越廣泛的應用,在各類(lèi)Jsp應用程序中,Jsp + Java Bean的組合成為了一種事實(shí)上最常見(jiàn)的Jsp程序的標準,就讓我們來(lái)看看具體的Jsp是如何與Java Bean結合在一起的吧。
本教程將闡述JavaBean的原理,接著(zhù)將闡述JavaBean在JavaServer Page下的特定語(yǔ)法,然后演示一個(gè)使用Jsp+JavaBean的簡(jiǎn)單的計數器,最后將詳細的講解一個(gè)有數據庫功能的JavaBean+jsp的用戶(hù)注冊程序。
Java Bean原理與應用
1、什么是JavaBean?
JavaBean是描述Java的軟件組件模型,有點(diǎn)類(lèi)似于Microsoft的COM組件概念。在Java模型中,通過(guò)JavaBean可以無(wú)限擴充Java程序的功能,通過(guò)JavaBean的組合可以快速的生成新的應用程序。對于程序員來(lái)說(shuō),最好的一點(diǎn)就是JavaBean可以實(shí)現代碼的重復利用,另外對于程序的易維護性等等也有很重大的意義。
JavaBean通過(guò)Java虛擬機(Java Virtual Machine)可以得到正確的執行,運行JavaBean最小的需求是JDK1.1或者以上的版本。
JavaBean傳統的應用在于可視化的領(lǐng)域,如AWT下的應用。自從Jsp誕生后,JavaBean更多的應用在了非可視化領(lǐng)域,在服務(wù)器端應用方面表現出來(lái)了越來(lái)越強的生命力。在這里我們主要討論的是非可視化的JavaBean,可視化的JavaBean在市面上有很多Java書(shū)籍都有詳細的闡述,在這里就不作為重點(diǎn)了。
2、非可視化的JavaBean
非可視化的JavaBean,顧名思義就是沒(méi)有GUI界面的JavaBean。在Jsp程序中常用來(lái)封裝事務(wù)邏輯、數據庫操作等等,可以很好地實(shí)現業(yè)務(wù)邏輯和前臺程序(如jsp文件)的分離,使得系統具有更好的健壯性和靈活性。
一個(gè)簡(jiǎn)單的例子,比如說(shuō)一個(gè)購物車(chē)程序,要實(shí)現購物車(chē)中添加一件商品這樣的功能,就可以寫(xiě)一個(gè)購物車(chē)操作的JavaBean,建立一個(gè)public的AddItem成員方法,前臺Jsp文件里面直接調用這個(gè)方法來(lái)實(shí)現。如果后來(lái)又考慮添加商品的時(shí)候需要判斷庫存是否有貨物,沒(méi)有貨物不得購買(mǎi),在這個(gè)時(shí)候我們就可以直接修改JavaBean的AddItem方法,加入處理語(yǔ)句來(lái)實(shí)現,這樣就完全不用修改前臺jsp程序了。
當然,也可以把這些處理操作完全寫(xiě)在jsp程序中,不過(guò)這樣的jsp頁(yè)面可能就有成百上千行,光看代碼就是一個(gè)頭疼的事情,更不用說(shuō)修改了。如果您使用過(guò)asp開(kāi)發(fā)過(guò)程序的話(huà),相信對這就深有體會(huì )了(其實(shí)使用ASP+COM組件完全可以實(shí)現同jsp+javabean同樣的架構,但不知道某種原因網(wǎng)上常見(jiàn)的都是全部寫(xiě)在asp頁(yè)面中,所以使得維護修改等極為不方便,當然這是題外話(huà)了)。由此可見(jiàn),通過(guò)JavaBean可以很好地實(shí)現邏輯的封裝、程序的易于維護等等。
如果您使用Jsp開(kāi)發(fā)程序,一個(gè)很好的習慣就是多使用JavaBean。
3、JavaBean的簡(jiǎn)單例子
創(chuàng )建JavaBean并不是一件困難的事情,如果您寫(xiě)過(guò)Java程序的話(huà)那就很容易了,要注意一點(diǎn)的就是在非可視化JavaBean中,常用>get或者>set這樣的成員方法來(lái)處理屬性>(properties>)。>
下面讓我們來(lái)看一個(gè)簡(jiǎn)單的JavaBean
FirstJavaBean.java
import java.io.*;
public class FirstJavaBean
{
private String FirstProperty = new String("");
public FirstJavaBean()
{
}
public String getFirstProperty()
{
return FirstProperty;
}
public void setFirstProperty(String value)
{
FirstProperty = value;
}
public static void main(String[] args)
{
System.out.println("My First JavaBean!");
}
}
如果運行這個(gè)程序,就會(huì )出現下面的結果:
First JavaBean!
這是一個(gè)很典型的JavaBean的代表,簡(jiǎn)單地解釋一下,FirstProperty是其中的一個(gè)屬性(Property),外部通過(guò)get/set方法可以對這個(gè)屬性進(jìn)行操作,如果您寫(xiě)過(guò)VB的class的話(huà),對這個(gè)就再也熟悉不過(guò)了。Main方法是為了測試程序用的,寫(xiě)JavaBean可以先不必加入到Jsp程序中調用,而直接用main方法來(lái)進(jìn)行調試,調試好以后就可以在Jsp程序中調用了。
JavaBeans 和 JavaServer Pages的結合
通過(guò)上面的學(xué)習,大家對JavaBean應該有了一個(gè)基本的了解,對于在JavaServer Pages中調用JavaBeans我們還需要了解一些特定的jsp的內容,讓我們來(lái)看看吧。
JavaServer Pages中的JavaBean相關(guān)標簽
在JavaServer Pages中調用JavaBean有三個(gè)標準的標簽,那就是<jsp:useBean>, <jsp:setProperty>,以及<jsp:getProperty>。
<jsp:useBean>標簽
<jsp:useBean>可以定義一個(gè)具有一定生存范圍以及一個(gè)唯一id的JavaBean的實(shí)例,這樣JavaServer Pages通過(guò)id來(lái)識別JavaBean,也可以通過(guò)id.method類(lèi)似的語(yǔ)句來(lái)操作JavaBean。
在執行過(guò)程中,<jsp:useBean>首先會(huì )嘗試尋找已經(jīng)存在的具有相同id和scope值的JavaBean實(shí)例,如果沒(méi)有就會(huì )自動(dòng)創(chuàng )建一個(gè)新的實(shí)例。
其具體語(yǔ)法如下
<jsp:useBean id=“name”
scope=“page|request|session|application”
typeSpec>
body
</jsp:useBean>
其中,typeSpec定義如下
typeSpec ::=class=“className”
| class=“className” type=“typeName”
| type=“typeName” class=“className”
| beanName=“beanName” type=“typeName”
| type=“typeName” beanName=“beanName”
| type=“typeName”
下面的表格是<jsp:useBean>標簽中相關(guān)屬性的含義
屬性及定義
Id
id屬性是JavaBean對象的唯一標志,代表了一個(gè)JavaBean對象的實(shí)例。它具有特定的存在范圍(page|request|session|application)。在JavaServer Pages中通過(guò)id來(lái)識別JavaBean。
Scope
Scope屬性代表了Javabean對象的生存時(shí)間,可以是page, request, session, 和 application中的一種。
Class
代表了JavaBean對象的class名字,特別注意大小寫(xiě)要完全一致。
beanName
BeanName屬性代表了Bean的名字,通常通過(guò)java.beans.Beans class的instantiate() 方法來(lái)初始化。.
Type
Type屬性指定了腳本變量定義的類(lèi)型,默認為腳本變量定義和class中的屬性一致,一般我們都采用默認值
<jsp:setProperty>標簽
另一個(gè)標準的標簽就是<jsp:setProperty>標簽了,它主要用于設置bean的屬性值。JavaServer Pages中調用的語(yǔ)法如下:
<jsp:setProperty name=“beanName” last_syntax />
其中,name屬性代表了已經(jīng)存在的并且具有一定生存范圍(scope)的JavaBean實(shí)例。last_syntax代表的語(yǔ)法如下: property=“*” |
property=“propertyName” |
property=“propertyName” param=“parameterName” |
property=“propertyName” value=“propertyValue”
下面是<jsp:setProperty>標簽的基本屬性以及含義
屬性及定義
Name
Name代表通過(guò)<jsp:useBean> 標簽定義的JavaBean對象實(shí)例。
Property
這是個(gè)很重要的屬性,代表了你想設置值的屬性property名字。如果使用property=”*”,程序就會(huì )反復的查找當前的ServletRequest所有參數,并且匹配JavaBean中相同名字的屬性property,并通過(guò)JavaBean中屬性的set方法賦值value給這個(gè)屬性。如果value屬性為空,則不會(huì )修改Javabean中的屬性值。
Param
Param屬性代表了頁(yè)面請求的參數名字,<jsp:setProperty>標簽不能同時(shí)使用param和value。
Value
Value屬性代表了賦給Bean的屬性property的具體值。
<jsp:getProperty>標簽
最后一個(gè)標簽就是<jsp:getProperty>標簽了.它可以得到JavaBean實(shí)例的屬性值,并將他們轉換為 java.lang.String, 最后放置在隱含的Out對象中. JavaBean的實(shí)例必須在<jsp:getProperty>前面定義.
<jsp:getProperty>標簽的語(yǔ)法如下:
<jsp:getProperty name=“name” property=“propertyName” />
下面是<jsp:getProperty>標簽的基本屬性以及含義
屬性及定義
Name
Name屬性代表了想要獲得屬性值的Bean的實(shí)例,Bean實(shí)例必須在前面用<jsp:useBean>標簽定義.
Property
Property屬性代表了想要獲得值的那個(gè)property的名字。
聯(lián)系客服