Java Bean詳解

JavaBean 是一種JAVA語言寫成的可重用組件。爲寫成JavaBean,類必須是具體的和公共的,並且具有無參數的構造器。JavaBean 通過提供符合一致性設計模式的公共方法將內部域暴露成員屬性,set和get方法獲取。衆所周知,屬性名稱符合這種模式,其他Java 類可以通過自省機制(反射機制)發現和操作這些JavaBean 的屬性。


功能特點
       用戶可以使用JavaBean將功能、處理、值、數據庫訪問和其他任何可以用java代碼創造的對象進行打包,並且其他的開發者可以通過內部的JSP頁面、Servlet、其他JavaBean、applet程序或者應用來使用這些對象。用戶可以認爲JavaBean提供了一種隨時隨地的複製和粘貼的功能,而不用關心任何改變。

       JavaBean可分爲兩種:一種是有用戶界面(UI,User Interface)的JavaBean;還有一種是沒有用戶界面,主要負責處理事務(如數據運算,操縱數據庫)的JavaBean。JSP通常訪問的是後一種JavaBean。

       JavaBean是可複用的平臺獨立的軟件組件,開發者可以在軟件構造器工具中對其直接進行可視化操作。

       軟件構造器工具可以是Web頁面構造器、可視化應用程序構造器、GUI設計構造器或服務器應用程序構造器。有時,構造器工具也可以是一個包含了一些bean的複合文檔的文檔編輯器。

       JavaBean可以是簡單的GUI要素,如按鈕或滾動條;也可以是複雜的可視化軟件組件,如數據庫視圖,有些JavaBean是沒有GUI表現形式的,但這些JavaBean仍然可以使用應用程序構造器可視化地進行組合。

       一個JavaBean和一個JavaApplet相似,是一個非常簡單的遵循某種嚴格協議的Java類。每個JavaBean的功能都可能不一樣,但它們都必須支持以下特徵。

       一個bean沒有必須繼承的特定的基類或接口。可視化的bean必須繼承的類是java.awt.Component,這樣它們才能添加到可視化容器中去,非可視化bean則不需要繼承這個類。有許多bean,無論是在應用程序構造器工具中,還是在最後創建好的應用程序中,都具有很強的可視化特徵,但這並非每個bean必須的特徵。

       在使用Java編程時,並不是所有軟件模塊都需要轉換成bean。Bean比較適合於那些具有可視化操作和定製特性的軟件組件。

       從基本上說,JavaBean可以看成是一個黑盒子,即只需要知道其功能而不必管其內部結構的軟件設備。黑盒子只介紹和定義其外部特徵和與其他部分的接口,如按鈕、窗口、顏色、形狀、句柄等。

       通過將系統看成使用黑盒子關聯起來的通訊網絡,我們可以忽略黑盒子內部的系統細節,從而有效地控制系統的整體性能。

作爲一個黑盒子的模型,JavaBean有3個接口面,可以獨立進行開發。

1. JavaBean可以調用的方法。

2. JavaBean提供的可讀寫的屬性。

3. JavaBean向外部發送的或從外部接收的事件。


組成
一個JavaBean由3部分組成:
  
  (1) 屬性(properties)
  JavaBean提供了高層次的屬性概念,屬性在JavaBean中不只是傳統的面向對象的概念裏的屬性,它同時還得到了屬性讀取和屬性寫入的API的支持。屬性值可以通過調用適當的bean方法進行。比如,可能bean有一個名字屬性,這個屬性的值可能需要調用String getName()方法讀取,而寫入屬性值可能要需要調用void setName(String str)的方法。
  每個JavaBean屬性通常都應該遵循簡單的方法命名規則,這樣應用程序構造器工具和最終用戶才能找到JavaBean提供的屬性,然後查詢或修改屬性值,對bean進行操作。JavaBean還可以對屬性值的改變作出及時的反應。比如一個顯示當前時間的JavaBean,如果改變時鐘的時區屬性,則時鐘會立即重畫,顯示當前指定時區的時間。
  (2) 方法(method)
  JavaBean中的方法就是通常的Java方法,它可以從其他組件或在腳本環境中調用。默認情況下,所有bean的公有方法都可以被外部調用,但bean一般只會引出其公有方法的一個子集。
  由於JavaBean本身是Java對象,調用這個對象的方法是與其交互作用的唯一途徑。JavaBean嚴格遵守面向對象的類設計邏輯,不讓外部世界訪問其任何字段(沒有public字段)。這樣,方法調用是接觸Bean的唯一途徑。
  但是和普通類不同的是,對有些Bean來說,採用調用實例方法的低級機制並不是操作和使用Bean的主要途徑。公開Bean方法在Bean操作中降爲輔助地位,因爲兩個高級Bean特性--屬性和事件是與Bean交互作用的更好方式。
  因此Bean可以提供要讓客戶使用的public方法,但應當認識到,Bean設計人員希望看到絕大部分Bean的功能反映在屬性和事件中,而不是在人工調用和各個方法中。
  (3) 事件(event)
  Bean與其他軟件組件交流信息的主要方式是發送和接受事件。我們可以將bean的事件支持功能看作是集成電路中的輸入輸出引腳:工程師將引腳連接在一起組成系統,讓組件進行通訊。有些引腳用於輸入,有些引腳用於輸出,相當於事件模型中的發送事件和接收事件。
  事件爲JavaBean組件提供了一種發送通知給其他組件的方法。在AWT事件模型中,一個事件源可以註冊事件監聽器對象。當事件源檢測到發生了某種事件時,它將調用事件監聽器對象中的一個適當的事件處理方法來處理這個事件。
  由此可見,JavaBean確實也是普通的Java對象,只不過它遵循了一些特別的約定而已。


範圍
       JavaBean 的範圍 Scope 是一個具有生命時間的變量。JavaBean的範圍在<jsp:useBean scope=”….>標誌中右邊進行表示。將產生一個JavaBean的快捷參考。

說明:jsp服務器引擎將剝離<jsp。。。。標記。並且在最終用戶的瀏覽器上無法顯示實際代碼。

存在下面四種範圍: 頁面page、 請求request、 對話session、 應用application。

對話範圍

對話範圍的JavaBean 主要應用於跨多個頁面和時間段: 例如填充 用戶信息。 添加信息並且接受回饋,保存用戶最.近執行頁面的軌跡。對話範圍JavaBean保留一些和用戶對話 ID 相關的信息。這些信息來自臨時的對話cookie,並在當用戶關閉瀏覽器時,這個cookie將從客戶端和服務器刪除。

請求範圍

頁面和請求範圍的JavaBean有時類似表單的bean , 這是因爲 他們大都用於處理表單。表單需要很長的時間來處理用戶的輸入,通常情況下用於頁面接受HTTP/POST或者GET請求。另外頁面和請求範圍的bean可以用於減少大型站點服務器上的負載,如果使用對話bean,耽擱的處理就可能會消耗掉很多資源。

應用範圍

應用範圍通常應用於服務器的部件,例如 JDBC連接池、應用監視、用戶計數和其他參與用戶行爲的類。

在Bean中限制HTML的產生:

理論上,JavaBean 將不會產生任何HTML,因爲這是jsp層負責的工作;然而,爲動態消息提供一些預先準備的格式是非常有用的。產生的HTML將被標註的 JavaBean方法返回。

這裏有一些非常重要的事情:

1. 不要試圖在JavaBean返回的HTML中放置任何字體尺寸。

並不是所有的瀏覽器都相同。很多瀏覽器無法處理完整的字體尺寸。

2. 不要試圖在JavaBean返回的HTML中放置任何腳本或者DHTML。

向頁面直接輸出腳本或者DHTML相當於自我毀滅,因爲某些瀏覽器版本在處理不正確的腳本時會崩潰(非常少但是有)。如果用戶的JavaBean在運行時是動態的推出複雜的HTML語言,用戶將陷入調試的噩夢。另外,複雜的HTML將限制JavaBean的壽命和靈活性。

3. 不要提供任何的選擇。

如果用戶使用不同的系統瀏覽頁面,可以提供一種可以替換的方法。

按着Sun公司的定義,JavaBean是一個可重複使用的軟件組件。實際上JavaBean是一種Java類,通過封裝屬性和方法成爲具有某種功能或者處理某個業務的對象,簡稱bean。由於javabean是基於java語言的,因此javabean不依賴平臺,具有以下特點:

1. 可以實現代碼的重複利用

2. 易編寫、易維護、易使用

3. 可以在任何安裝了Java運行環境的平臺上的使用,而不需要重新編譯。

編寫javabean就是編寫一個java的類,所以你只要會寫類就能編寫一個bean,這個類創建的一個對象稱做一個bean。爲了能讓使用這個bean的應用程序構建工具(比如JSP引擎)知道這個bean的屬性和方法,只需在類的方法命名上遵守以下規則:

1. 如果類的成員變量的名字是xxx,那麼爲了更改或獲取成員變量的值,即更改或獲取屬性,在類中可以使用兩個方法:

getXxx(),用來獲取屬性xxx。

setXxx(),用來修改屬性xxx.。

2. 對於boolean類型的成員變量,即布爾邏輯類型的屬性,允許使用"is"代替上面的"get"。

3. 類中訪問屬性的方法都必須是public的,一般屬性是private的。

4. 類中如果有構造方法,那麼這個構造方法也是public的並且是無參數的。


任務
       JavaBean的任務就是: “Write once, run anywhere, reuse everywhere”,即“一次性編寫,任何地方執行,任何地方重用”。這個任何實際上就是要解決困擾軟件工業的日益增加的複雜性,提供一個簡單的、緊湊的和優秀的問題解決方案。

1. 一個開發良好的軟件組件應該是一次性地編寫,而不需要再重新編寫代碼以增強或完善功能。因此,JavaBean應該提供一個實際的方法來增強現有代碼的利用率,而不再需要在原有代碼上重新進行編程。除了在節約開發資源方面的意義外,一次性地編寫JavaBean組件也可以在版本控制方面起到非常好的作用。開發者可以不斷地對組件進行改進,而不必從頭開始編寫代碼。這樣就可以在原有基礎上不斷提高組件功能,而不會犯相同的錯誤。

2. JavaBean組件在任意地方運行是指組件可以在任何環境和平臺上使用,這可以滿足各種交互式平臺的需求。由於JavaBean是基於Java的,所以它可以很容易地得到交互式平臺的支持。JavaBean組件在任意地方執行不僅是指組件可以在不同的操作平臺上運行,還包括在分佈式網絡環境中運行。

3.JavaBean組件在任意地方的重用說的是它能夠在包括應用程序、其他組件、文檔、Web站點和應用程序構造器工具的多種方案中再利用。這也許是JavaBean組件的最爲重要的任務了,因爲它正是JavaBean組件區別於Java程序的特點之一。Java程序的任務就是JavaBean組件所具有的前兩個任務,而這第3個任務卻是JavaBean組件獨有的。


設計目標
JavaBean的一些具體的主要設計目標:

1.緊湊而方便的創建和使用

JavaBean緊湊性的需求是基於JavaBean組件常常用於分佈式計算環境中,這使得JavaBean組件常常需要在有限的帶寬連接環境下進行傳輸。顯然,爲了適應傳送的效率和速度,JavaBean組件必須是越緊湊越好。另外,爲了更好地創建和使用組件,就應該使其越簡單越好。通常爲了提高組件的簡易性和緊湊性,設計過程需要投入相對較大的功夫。

現已有的組件軟件技術通常是使用複雜的API,這常常搞得開發者在創建組件時暈頭轉向。因此,JavaBean組件必須不僅容易使用,而且必須便於開發。這對於組件開發者而言是至關重要的,因爲這可以使得開發者不必花大量功夫在使用API進行程序設計上,從而更好地對組件進行潤飾,提高組件的可觀賞性。

JavaBean組件大部分是基於已有的傳統Java編程的類結構上的,這對於那些已經可以熟練地使用Java語言的開發者非常有利。而且這可以使得JavaBean組件更加緊湊,因爲Java語言在編程上吸收了以前的編程語言中的大量優點,已經使開發出來的程序變得相當有效率。

2.完全的可移植性

JavaBean API與操作基礎的獨立於平臺的Java系統相結合,提供了獨立於平臺的組件解決方案。因此,組件開發者就可以不必再爲帶有Java applet平臺特有的類庫而擔心了。最終的結果都將是計算機界共享可重複使用的組件,並在任何支持Java的系統中無需修改地執行。

3.繼承Java的強大功能

現有的Java結構已經提供了多種易於應用於組件的功能。其中一個比較重要的是Java本身的內置類發現功能,它可以使得對象在運行時彼此動態地交互作用,這樣對象就可以從開發系統或其開發歷史中獨立出來。

對於JavaBean而言,由於它是基於Java語言的,所以它就自然地繼承了這個對於組件技術而言非常重要的功能,而不再需要任何額外開銷來支持它。

JavaBean繼承在現有Java功能中還有一個重要的方面,就是持久性,它保存對象並獲得對象的內部狀態。通過Java提供的序列化(serialization)機制,持久性可以由JavaBean自動進行處理。當然,在需要的時候,開發者也可以自己建立定製的持久性方案。

4.應用程序構造器支持

JavaBean的另一個設計目標是設計環境的問題和開發者如何使用JavaBean創建應用程序。JavaBean體系結構支持指定設計環境屬性和編輯機制以便於JavaBean組件的可視化編輯。這樣開發者可以使用可視化應用程序構造器無縫地組裝和修改JavaBean組件。就像Windows平臺上的可視化開發工具VBX或OCX控件處理組件一樣。通過這種方法,組件開發者可以指定在開發環境中使用和操作組件的方法。

5.分佈式計算支持

支持分佈式計算雖然不是JavaBean體系結構中的核心元素,但也是JavaBean中的一個主要問題。

JavaBean使得開發者可以在任何時候使用分佈式計算機制,但不使用分佈式計算的核心支持來給自己增加額外負擔。這正是出於JavaBean組件的緊湊性考慮的,無疑分佈式計算需要大量的額外開銷。


需求
JavaBean是java類,屬於某些特定的譯碼指導方針,並且擴展了適應性和範圍,允許用戶訪問內部的屬性和方法。通過這些,JavaBean類可以用於下列方法:

1. 在IDE中,JavaBean的功能允許應用開發者瀏覽其中的方法,即JavaBean是被編譯的,並且無法利用原始的源文件。

2. 在 Remote Method Invocation(RMI) 的分佈式風格中,這項功能聽起來並不讓人興奮,但是在未來的包含企業版的JavaBean後,將改變這種情況。

3. 爲了JavaBean的屬性值和狀態可以保存到磁盤上。


界限
       雖然JavaBean和Java之間已經有了明確的界限,但在某些方面JavaBean和Java之間仍然存在着非常明顯的混淆。Java確實是能夠爲用戶創建可重用的對象,但它卻沒有管理這些對象相互作用的規則或標準。JavaBean通過指定定義對象之間交互作用的機制,以及大部分對象需要支持的常用行爲,如持久性和實際處理等,建立了自己需要的組件模型。

       雖然當前的Java組件模型也可以運行得很好,但在傳送真正的可重用性和交互操作性上仍然非常有限,Java用戶需要做的最多的一件事就是創建applet並使得它們在Web 頁面上相互通訊,這並非易事。JavaBean提供了一個框架包,使用這個包進行通訊就容易得多了。

       JavaBean組件能夠通過定義好的標準屬性改進性能。總體而言,JavaBean充分發展了Java applet的功能,並結合了JavaAWT組件的緊湊性和可重用性。


三大構件
Java bean:編程語言java中的術語,行業內通常稱爲java豆,帶點美哩口味,飄零着咖啡的味道,在計算機編程中代表java構件(EJB的構件),通常有Session bean,Entity bean,MessageDriven Bean三大類。

Session bean:會話構件,是短暫的對象,運行在服務器上,並執行一些應用邏輯處理,它由客戶端應用程序建立,其數據需要自己來管理。分爲無狀態和有狀態兩種。

Entity bean:實體構件,是持久對象,可以被其他對象調用。在建立時指定一個唯一標示的標識,並允許客戶程序,根據實體bean標識來定位beans實例。多個實體可以併發訪問實體bean,事務間的協調由容器來完成。

MessageDriven Bean:消息構件,是專門用來處理JMS(Java Message System)消息的規範(EIB2.0)。JMS是一種與廠商無關的API,用來訪問消息收發系統,並提供了與廠商無關的訪問方法,以此來訪問消息收發服務。JMS客戶機可以用來發送消息而不必等待迴應。


發展
最初,JavaBean的目的是爲了將可以重複使用的軟件代碼打包標準。特別是用於幫助廠家開發在綜合開發環境(IDE)下使用的java軟件部件。這些包括如Grid控件,用戶可以將該部件拖放到開發環境中。從此,JavaBean就可以擴展爲一個java web 應用的標準部件,並且JavaBean部件框架已經擴展爲企業版的 Bean(EJB)。


開發環境
普通JavaBean組件是要分佈在各自環境中,所以它們應該能夠適應各種環境。雖然我們無法事先預知JavaBean要運行的確切環境,但以下兩點是可以確定的:

1. bean必須能夠在一個應用程序構造器工具中運行。

2. bean必須可以在產生的應用程序的運行環境中使用。


設計環境
第一點說明的是bean必須可以在設計環境(design environment)中運行。在設計環境中,bean應該提供設計信息給應用程序構造器工具並允許終端用戶制定bean的外觀和行爲。

在傳統的軟件構造活動中,必須通過編譯、鏈接之後才能看到應用程序的最終運行結果;而利用JavaBean設計的軟件中,則沒有這種明確的界限。使用JavaBean,就可以非常直觀地設計應用程序軟件,在設計過程中賦予軟件主機。而且,這個過程更加容易重複開發,設計思想更加容易變成原型。


運行環境
第二點說明的是bean必須可以在運行環境(run-time environment)中使用。在這個環境中,對設計信息和定製的需求並不重要。一個組件的設計環境信息和設計環境中編寫的代碼通常可能是非常巨大的。

因此,我們可能需要在bean的設計環境方面和運行環境方面作一個明確的區分,這樣,就可能需要在運行環境中不使用bean的任何設計環境代碼來配置這個bean。所以,JavaBean就必須分別支持運行環境接口的類庫和設計環境接口的類庫。


編程入門

一般要求
首先,您必須有一個不帶有參數的公用構造器。此構造器也應該通過調用各個特性的設置方法來設置特性的默認值,例如:

public Fireworks()
 
{
 
setAutoStart(true);
 
setBackground(Color.black);
 
setSpeed(10);
 
setRadius(40);
 
}
如果 bean 是一個從 java.awt.Component 類繼承而來的可視 bean,您就應該爲 bean 定義一個默認的首選大小,例如:

public Dimension getPreferredSize()
 
{
 
return (new Dimension(radius*3, radius*3));
 
}
 
public Dimension getMinimumSize()
 
{
 
return getPreferredSize();
 
}

特性
對於您需要的每個特性,您應該有一個帶有匹配公用 getter 和 setter 方法的專用實例變量,例如:

private int speed;
 
public int getSpeed()
 
{
 
return speed;
 
}
 
public void setSpeed(int s)
 
{
 
speed = s;
 
}
此 get 和 set 方法必須有與實例變量相同的名稱,但是第一個字母要大寫並以 get 和 set 開頭。

由於連接而在任何時候更改它們的特性時,確認 Bean 在運行時行爲正確也是很重要的。如果特性的更改影響到 Bean 的可視外觀,您應該以此特性設置的方法來調用

repaint();。

同樣,如果特性的更改影響到 bean 的大小和位置,您需要確認獲得驗證的事物。我們建議編寫您自己的 validateAll 方法,如下所示:

private void validateAll()
 
{
 
if (isValid())
 
{
 
Component self = this;
 
self.invalidate();
 
Component myParent = self.getParent();
 
if (myParent != null)
 
{
 
myParent.invalidate();
 
self = myParent;
 
}
 
self.validate();
 
}
 
}
然後以此特性設置的方法調用

validateAll();。

bean 類將無法進行關於調用特性設置方法命令的假設。您應該寫 bean 以便可以初始構造它,然後在不引起錯誤的同時在任何命令中設置其特性。


操作
對於每個您需要的操作,您應該有一個公用方法,例如:

public void start()
 
{
 
if(thread==null)
 
{
 
thread=new Thread(this);
 
thread.start();
 
}
 
}
您爲操作寫的方法應該在無須期待用戶創建連接或設置很多特性的情況下獨立操作。 例如,如果您寫了一個音頻 Bean,您希望通過播放操作處理打開聲音的所有步驟、完成您需要的所有設置並播放聲音。同樣,即使聲音未播放,停止操作也應起作用。


事件
對於您需要的每個事件或事件設置,您應該定義事件和偵聽器類。對於此例,查看 FireworksEvent.java 源文件以及 Fireworks.java 文件。此事件類的源應該如同這樣:

import java.awt.*;
 
import java.util.*;
 
publicclassFireworksEvent extends EventObject
 
{
public static final int EXPLODED = 1;
int id = 0;
 
public FireworksEvent(Component source, int id)
 
{
super(source);
id = id;
}
 
public int getID()
 
{
return id;
}
 
}
您應該爲此事件設置中的每個事件定義一個公用靜態結束事件標識符,例如在此例子中的 EXPLODED。

對於偵聽器類的源,查看 FireworksListener.java源文件:

import java.util.*;
 
public interface FireworksListener extends EventListener
 
{
 
public abstract void exploded(FireworksEvent e);
 
}
您應該爲此事件設置中的每個事件定義一個公用抽象方法,例如在此例子中的 exploded。 而且,偵聽器類必須擴展 EventListener ,以使 JAR 嚮導能夠找到它。

然後,如果由 bean 類播送事件,它必須跟蹤偵聽事件的對象。要這樣做,您需要定義偵聽器實例變量以及 addListener 和 removeListener 方法。返回 Fireworks.java 源,例如,您將查看到:

private Vector listeners = new Vector();
 
public void addFireworksListener(FireworksListener f)
 
{
 
listeners.addElement(f);
 
}
 
public void removeFireworksListener(FireworksListener f)
 
{
 
listeners.removeElement(f);
 
}
最後,bean 類需要以正確的次數將事件實際播送到所有的偵聽器。要這樣做,您需要定義 processEvent 方法並以適當的次數調用它,例如:

public void processFireworksEvent(FireworksEvent e)
 
{
 
for (Enumeration enum = listeners.elements(); enum.hasMoreElements(); )
 
((FireworksListener)enum.nextElement()).exploded(e);
 
}
 
public void run()
 
{
 
processFireworksEvent(new FireworksEvent(this, FireworksEvent.EXPLODED));
 
}

注意事項
實際應用中,在表現對象或者處理前擴展JavaBean的設計非常有用。通常認爲如果提供信息,web開發者將在功能上滿足用戶對JavaBean的需求。例如: HTML中顯示敏感的數據時,用戶可以屏蔽的條目,如密碼、電話號碼等。

良好規劃設計的JavaBean是值得信賴的。

Java 中的 null 不同於SQL中的 null

看這樣一道測試程序:

public class NullTest
 
{
 
public static void main(String[] args)
 
{
 
int I = 0;
 
// int I = null;// not a valid initialization;
 
String str = null;
 
String strZeroOutValue = "";
 
StringBuffer sb = new StringBuffer("Null test: String initialized as null =");
 
sb.append(str);
 
sb.append(" String representing a Zero Out Value:")
 
sb.append(strZeroOutValue);
 
System.out.println(sb.toString());
 
}
 
}
這個程序將產生下面的結果:

Null test: String initialized as null = null

n String representing a Zero Out Value:

在JavaBean中, 我們將 I變量聲明爲一個 int, 我們必須處理與該變量相關的值,因爲I 默認的沒有值,int類型無法初始化爲 null, 如果int 值沒有進行明確的初始化,編譯器將提示錯誤。

執行 NullTest程序,將驗證在文本中空字符串是空值的替代,用於顯示 SQL 的插入和更新。如果我們需要刪除一些信息,通過刪除表單區域的文本,需要將數據庫發送長度爲0的字符串。

儘管大多數數據庫將空字符串作爲空值進行操作,如果我們使用的數據庫不支持處理空字符串的話,我們必須寫入附加的java代碼,來創建自己的SQL插入聲明。

例如:

if(test.length==0)
 
{
 
sb.append("null");
 
}
 
else
 
{
 
sb.append(test);
 
}

區別EJB
JavaBean 和 Server Bean(通常稱爲Enterprise JavaBean(EJB))有一些基本相同之處。它們都是用一組特性創建,以執行其特定任務的對象,獲得其它特性的能力。這使得 bean 的行爲根據特定任務和所在環境的不同而有所不同。

Enterprise Bean 與 JavaBean 不同。JavaBean 是使用java.beans包開發的,它是 Java 2 標準版的一部分。JavaBean 是一臺機器上同一個地址空間中運行的組件。JavaBean 是進程內組件。Enterprise Bean 是使用 javax.ejb 包開發的,它是標準JDK的擴展,是 Java 2 Enterprise Edition 的一部分。Enterprise Bean 是在多臺機器上跨幾個地址空間運行的組件。因此 Enterprise Bean 是進程間組件。JavaBean 通常用作 GUI 窗口小部件,而 Enterprise Bean 則用作分佈式商業對象。

一個可以讓你快速瞭解JavaBean的例子
Javabean就是Java類。從表示層的處理來考慮,Javabean就是一個個的service類。
現在就用一個實際的例子來說明javabean是怎樣工作的,建立一個用戶註冊登陸小模塊
--------------------------------------------------------------------------------------
/*1,建立一個javabean封裝用戶的信息(姓名和密碼)UserInfo.java,其中的方法有
setter方法來設置用戶的信息,getter方法來獲取用戶的信息*/
 
package user;//存放UserInfo.java的包,該包中放在web-inf目錄下
public class UserInfo
{
private String password;
private String name;
 
//獲取信息
public String getPassword()
{
return this.password;
}
public String getName()
{
return this.name;
}
//設置信息
public void setPassword(String p)
{
this.password=p;
}
public void setName(String n)
{
this.name=name;
}
}
 
--------------------------------------------------------------------------------------------------
/*2,現在做的事就是建立一個javabean處理數據庫操作以及一些簡單的邏輯操作UserRegist.java*/
 
package user;//同理也放在這個包中
import java.sql.*;
 
public class UserRegist
{
private UserInfo userInfo;//在此javabean中把UserInfo.java這個javabean引進來
private Connection conn=null;
 
//連接數據庫
public UserRegist()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/joke?user=root");
}
catch(Exception e)
{
e.printStackTrace();
}
}
 
public void setUserInfo(UserInfo userInfo)
{
this.userInfo=userInfo;
}
 
 
//進行註冊
public void regist()throws Exception
{
String reg="insert into user_Info values(?,?)";
try
{
PreparedStatement pstmt=conn.prepareStatement(reg);
//create a preparestatement sentence ,then to set their name
pstmt.setString(1,userInfo.getPassword());
pstmt.setString(2,userInfo.getName());
//excute update
pstmt.executeUpdate();
}
catch(Exception e)
{
e.printStackTrace();
throw e;
}
}
}
 
-----------------------------------------------------------------------------------------------------------------
/*3,好了,我們的要用到的javbean就建立完了,現在就是做一個簡單的表單html頁面了,login.html,接受用戶輸入的信息*/
 
<form  action="regist.jsp" name="form1">
 
<table>
 
<tr>
 
<td> username:</td>
 
<td><input name="name"></input></td>
 
</tr>
 
<tr>
 
<td>userpassword:</td>
 
<td><input  type="password" name="password"></input></td>
 
</tr>
 
<tr>
 
<td><input type="submit" value="go"></td>
 
<td><input type="reset" value="reset"></td>
 
<table>
 
</form>
 
----------------------------------------------------
 
/*4,最後我們做的事就是用一個簡單的jsp頁面讓兩個javabean工作起來,regist.jsp*/
 
 
 
<%@page contentType="text/html;charset=GB2312"%>
 
//利用此標籤來調用UserInfo.java
 
<jsp:useBean id="userInfo" class="user.UserInfo" scope="page">
 
//利用此標籤來用UserInfo.java接受並保存表單中的信息
 
<jsp:setProperty name="userInfo" property="*"/>
 
</jsp:useBean>
 
//來調用UserRegist.java
 
<jsp:useBean id="regist" class="user.UserRegist" scope="page"/>
 
 
 
<%
 
regist.setUserInfo(userInfo);//調用UserRegist.java中的setUserInfo()方法獲取保存在serInfo.java中的信息
 
regist.regist( );//調用UserRegist.java中的regist( )方法進行註冊
 
out.println("registed ok!");
 
%>
 
<br><hr><br>
 
<a href="login.jsp">back</a>
 

發佈了58 篇原創文章 · 獲贊 17 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章