JavaBean 概述
用戶可以使用JavaBean將功能、處理、值、數(shù)據(jù)庫(kù)訪問(wèn)和其他任何可以用java代碼創(chuàng)造的對(duì)象進(jìn)行打包,并且其他的開(kāi)發(fā)者可以通過(guò)內(nèi)部的JSP頁(yè)面、Servlet、其他JavaBean、applet程序或者應(yīng)用來(lái)使用這些對(duì)象。用戶可以認(rèn)為JavaBean提供了一種隨時(shí)隨地的復(fù)制和粘貼的功能,而不用關(guān)心任何改變。
JavaBean 的發(fā)展
最初,JavaBean的目的是為了將可以重復(fù)使用的軟件代碼打包標(biāo)準(zhǔn)。特別是用與幫助廠家開(kāi)發(fā)在綜合開(kāi)發(fā)環(huán)境(IDE)下使用的java軟件部件。這些包括如Grid控件,用戶可以將該部件拖放到開(kāi)發(fā)環(huán)境中。從此,JavaBean就可以擴(kuò)展為一個(gè)java web 應(yīng)用的標(biāo)準(zhǔn)部件,并且JavaBean部件框架已經(jīng)擴(kuò)展為企業(yè)版的 Bean(EJB)。
JavaBean需求
JavaBean是java類,屬于某些特定的譯碼知道方針,并且擴(kuò)展了適應(yīng)性和范圍,允許用戶訪問(wèn)內(nèi)部的屬性和方法。通過(guò)這些,JavaBean類可以用于下列方法:
1. 在IDE中,JavaBean的功能允許應(yīng)用開(kāi)發(fā)者瀏覽其中的方法,即使JavaBean是被編譯的,并且無(wú)法利用原始的源文件。
2. 在 Remote Method Invocation(RMI) 的分布式風(fēng)格中,這項(xiàng)功能聽(tīng)起來(lái)并不讓人興奮,但是在未來(lái)的包含企業(yè)版的JavaBean后,將改變這種情況。
3. 為了JavaBean的屬性值和狀態(tài)可以保存到磁盤(pán)上。
這里說(shuō)的有些簡(jiǎn)單,如果想了解更多的東西,可以查閱一些資料。
JavaBean設(shè)計(jì)注意事項(xiàng)
實(shí)際應(yīng)用中,在表現(xiàn)對(duì)象或者處理前擴(kuò)展JavaBean的設(shè)計(jì)非常有用。通常認(rèn)為如果提供信息,web開(kāi)發(fā)者將在功能上滿足擁護(hù)對(duì)JavaBean的需求。例如: HTML中顯示敏感的數(shù)據(jù)時(shí),用戶可以屏蔽的條目,如密碼、電話號(hào)碼等。
良好規(guī)劃設(shè)計(jì)的JavaBean是值得信賴的。
Java 中的 null 不同于 SQL 中的 null
看這樣一道測(cè)試程序:
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(“\n String representing a Zero Out Value:”);
sb.append(strZeroOutValue);
System.out.println(sb.toString());
}
}
這個(gè)程序?qū)a(chǎn)生下面的結(jié)果:
Null test: String initialized as null = null
String representing a Zero Out Value:
在JavaBean中, 我們將 I 變量聲明為一個(gè) int, 我們必須處理與該變量相關(guān)的值,因?yàn)镮 默認(rèn)的沒(méi)有值,int 類型無(wú)法初始化為 null, 如果int 值沒(méi)有進(jìn)行明確的初始化,編譯器將提示錯(cuò)誤。
執(zhí)行 NullTest 程序,將驗(yàn)證在文本中空字符串是空值的替代,用于顯示 SQL 的插入和更新。如果我們需要?jiǎng)h除一些信息,通過(guò)刪除表單區(qū)域的文本,需要將數(shù)據(jù)庫(kù)發(fā)送長(zhǎng)度為0的字符串。
盡管大多數(shù)數(shù)據(jù)庫(kù)將空字符串作為空值進(jìn)行操作,如果我們使用的數(shù)據(jù)庫(kù)不支持處理空字符串的話,我們必須寫(xiě)入附加的java代碼,來(lái)創(chuàng)建自己的SQL插入聲明。
例如:
if(test.length==0)
{
sb.append(“null”);
}
else
{
sb.append(test);
}
JavaBean 的范圍:
JavaBean 的范圍。 Scope 是一個(gè)具有生命時(shí)間的變量。JavaBean的范圍在
<jsp:useBean scope=”….>標(biāo)志中右邊進(jìn)行表示。將產(chǎn)生一個(gè)JavaBean的快捷參考。
說(shuō)明:jsp服務(wù)器引擎將剝離<jsp。。。。標(biāo)記。并且在最終用戶的瀏覽器上無(wú)法顯示實(shí)際代碼。
存在下面四種范圍: 頁(yè)面、 請(qǐng)求、 對(duì)話、 應(yīng)用。
對(duì)話范圍:
對(duì)話范圍的JavaBean 主要應(yīng)用與跨多個(gè)頁(yè)面和時(shí)間段: 例如填充 用戶信息。 添加信息并且接受回饋,保存用戶最近執(zhí)行頁(yè)面的軌跡。對(duì)話范圍JavaBean保留一些和用戶對(duì)話 ID 相關(guān)的信息。這些信息來(lái)自臨時(shí)的對(duì)話cookie,并在當(dāng)用戶關(guān)閉瀏覽器時(shí),這個(gè)cookie將從客戶端和服務(wù)器刪除。
頁(yè)面/請(qǐng)求范圍:
頁(yè)面和請(qǐng)求范圍的JavaBean有時(shí)類似表單 的bean , 這是因?yàn)?他們大豆用與處理表單。表單需要很長(zhǎng)的時(shí)間來(lái)處理用戶的輸入,通常情況下用于頁(yè)面接受HTTP/POST或者GET請(qǐng)求。另外頁(yè)面和請(qǐng)求范圍的bean可以用于減少大型站點(diǎn)服務(wù)器上的負(fù)載,如果使用對(duì)話bean,耽擱的處理就可能會(huì)消耗掉很多資源。
應(yīng)用:
應(yīng)用范圍通常應(yīng)用于服務(wù)器的部件,例如 JDBC 連接池、應(yīng)用監(jiān)視、擁護(hù)計(jì)數(shù)和其他參與用戶行為的類。
在Bean中限制HTML的產(chǎn)生:
理論上,JavaBean 將不會(huì)產(chǎn)生任何HTML,因?yàn)檫@是jsp層負(fù)責(zé)的工作;然而,為了動(dòng)態(tài)消息提供一些預(yù)先準(zhǔn)備的格式是非常有用的。產(chǎn)生的HTML將被標(biāo)注的 JavaBean方法返回。
這里有一些非常重要的事情:
1. 不要試圖在JavaBean返回的HTML中放置任何字體尺寸。
并不是所有的瀏覽器都相同。很多瀏覽器無(wú)法處理完整的字體尺寸。
2. 不要試圖在JavaBean返回的HTML中放置任何腳本或者DHTML。
向頁(yè)面直接輸出腳本或者DHTML相當(dāng)于自我毀滅,因?yàn)槟承g覽器版本在處理不正確的腳本時(shí)會(huì)崩潰(非常少但是有)。如果用戶的JavaBean在運(yùn)行時(shí)是動(dòng)態(tài)的推出復(fù)雜的HTML語(yǔ)言,用戶將陷入調(diào)試的噩夢(mèng)。另外,復(fù)雜的HTML將限制JavaBean的壽命和靈活性。
3. 不要提供任何的選擇。
如果用戶使用不同的系統(tǒng)瀏覽頁(yè)面,可以提供一種可以替換的方法。
用戶可以使用JavaBean將功能、處理、值、數(shù)據(jù)庫(kù)訪問(wèn)和其他任何可以用java代碼創(chuàng)造的對(duì)象進(jìn)行打包,并且其他的開(kāi)發(fā)者可以通過(guò)內(nèi)部的JSP頁(yè)面、Servlet、其他JavaBean、applet程序或者應(yīng)用來(lái)使用這些對(duì)象。用戶可以認(rèn)為JavaBean提供了一種隨時(shí)隨地的復(fù)制和粘貼的功能,而不用關(guān)心任何改變。
JavaBean 的發(fā)展
最初,JavaBean的目的是為了將可以重復(fù)使用的軟件代碼打包標(biāo)準(zhǔn)。特別是用與幫助廠家開(kāi)發(fā)在綜合開(kāi)發(fā)環(huán)境(IDE)下使用的java軟件部件。這些包括如Grid控件,用戶可以將該部件拖放到開(kāi)發(fā)環(huán)境中。從此,JavaBean就可以擴(kuò)展為一個(gè)java web 應(yīng)用的標(biāo)準(zhǔn)部件,并且JavaBean部件框架已經(jīng)擴(kuò)展為企業(yè)版的 Bean(EJB)。
JavaBean需求
JavaBean是java類,屬于某些特定的譯碼知道方針,并且擴(kuò)展了適應(yīng)性和范圍,允許用戶訪問(wèn)內(nèi)部的屬性和方法。通過(guò)這些,JavaBean類可以用于下列方法:
1. 在IDE中,JavaBean的功能允許應(yīng)用開(kāi)發(fā)者瀏覽其中的方法,即使JavaBean是被編譯的,并且無(wú)法利用原始的源文件。
2. 在 Remote Method Invocation(RMI) 的分布式風(fēng)格中,這項(xiàng)功能聽(tīng)起來(lái)并不讓人興奮,但是在未來(lái)的包含企業(yè)版的JavaBean后,將改變這種情況。
3. 為了JavaBean的屬性值和狀態(tài)可以保存到磁盤(pán)上。
這里說(shuō)的有些簡(jiǎn)單,如果想了解更多的東西,可以查閱一些資料。
JavaBean設(shè)計(jì)注意事項(xiàng)
實(shí)際應(yīng)用中,在表現(xiàn)對(duì)象或者處理前擴(kuò)展JavaBean的設(shè)計(jì)非常有用。通常認(rèn)為如果提供信息,web開(kāi)發(fā)者將在功能上滿足擁護(hù)對(duì)JavaBean的需求。例如: HTML中顯示敏感的數(shù)據(jù)時(shí),用戶可以屏蔽的條目,如密碼、電話號(hào)碼等。
良好規(guī)劃設(shè)計(jì)的JavaBean是值得信賴的。
Java 中的 null 不同于 SQL 中的 null
看這樣一道測(cè)試程序:
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(“\n String representing a Zero Out Value:”);
sb.append(strZeroOutValue);
System.out.println(sb.toString());
}
}
這個(gè)程序?qū)a(chǎn)生下面的結(jié)果:
Null test: String initialized as null = null
String representing a Zero Out Value:
在JavaBean中, 我們將 I 變量聲明為一個(gè) int, 我們必須處理與該變量相關(guān)的值,因?yàn)镮 默認(rèn)的沒(méi)有值,int 類型無(wú)法初始化為 null, 如果int 值沒(méi)有進(jìn)行明確的初始化,編譯器將提示錯(cuò)誤。
執(zhí)行 NullTest 程序,將驗(yàn)證在文本中空字符串是空值的替代,用于顯示 SQL 的插入和更新。如果我們需要?jiǎng)h除一些信息,通過(guò)刪除表單區(qū)域的文本,需要將數(shù)據(jù)庫(kù)發(fā)送長(zhǎng)度為0的字符串。
盡管大多數(shù)數(shù)據(jù)庫(kù)將空字符串作為空值進(jìn)行操作,如果我們使用的數(shù)據(jù)庫(kù)不支持處理空字符串的話,我們必須寫(xiě)入附加的java代碼,來(lái)創(chuàng)建自己的SQL插入聲明。
例如:
if(test.length==0)
{
sb.append(“null”);
}
else
{
sb.append(test);
}
JavaBean 的范圍:
JavaBean 的范圍。 Scope 是一個(gè)具有生命時(shí)間的變量。JavaBean的范圍在
<jsp:useBean scope=”….>標(biāo)志中右邊進(jìn)行表示。將產(chǎn)生一個(gè)JavaBean的快捷參考。
說(shuō)明:jsp服務(wù)器引擎將剝離<jsp。。。。標(biāo)記。并且在最終用戶的瀏覽器上無(wú)法顯示實(shí)際代碼。
存在下面四種范圍: 頁(yè)面、 請(qǐng)求、 對(duì)話、 應(yīng)用。
對(duì)話范圍:
對(duì)話范圍的JavaBean 主要應(yīng)用與跨多個(gè)頁(yè)面和時(shí)間段: 例如填充 用戶信息。 添加信息并且接受回饋,保存用戶最近執(zhí)行頁(yè)面的軌跡。對(duì)話范圍JavaBean保留一些和用戶對(duì)話 ID 相關(guān)的信息。這些信息來(lái)自臨時(shí)的對(duì)話cookie,并在當(dāng)用戶關(guān)閉瀏覽器時(shí),這個(gè)cookie將從客戶端和服務(wù)器刪除。
頁(yè)面/請(qǐng)求范圍:
頁(yè)面和請(qǐng)求范圍的JavaBean有時(shí)類似表單 的bean , 這是因?yàn)?他們大豆用與處理表單。表單需要很長(zhǎng)的時(shí)間來(lái)處理用戶的輸入,通常情況下用于頁(yè)面接受HTTP/POST或者GET請(qǐng)求。另外頁(yè)面和請(qǐng)求范圍的bean可以用于減少大型站點(diǎn)服務(wù)器上的負(fù)載,如果使用對(duì)話bean,耽擱的處理就可能會(huì)消耗掉很多資源。
應(yīng)用:
應(yīng)用范圍通常應(yīng)用于服務(wù)器的部件,例如 JDBC 連接池、應(yīng)用監(jiān)視、擁護(hù)計(jì)數(shù)和其他參與用戶行為的類。
在Bean中限制HTML的產(chǎn)生:
理論上,JavaBean 將不會(huì)產(chǎn)生任何HTML,因?yàn)檫@是jsp層負(fù)責(zé)的工作;然而,為了動(dòng)態(tài)消息提供一些預(yù)先準(zhǔn)備的格式是非常有用的。產(chǎn)生的HTML將被標(biāo)注的 JavaBean方法返回。
這里有一些非常重要的事情:
1. 不要試圖在JavaBean返回的HTML中放置任何字體尺寸。
并不是所有的瀏覽器都相同。很多瀏覽器無(wú)法處理完整的字體尺寸。
2. 不要試圖在JavaBean返回的HTML中放置任何腳本或者DHTML。
向頁(yè)面直接輸出腳本或者DHTML相當(dāng)于自我毀滅,因?yàn)槟承g覽器版本在處理不正確的腳本時(shí)會(huì)崩潰(非常少但是有)。如果用戶的JavaBean在運(yùn)行時(shí)是動(dòng)態(tài)的推出復(fù)雜的HTML語(yǔ)言,用戶將陷入調(diào)試的噩夢(mèng)。另外,復(fù)雜的HTML將限制JavaBean的壽命和靈活性。
3. 不要提供任何的選擇。
如果用戶使用不同的系統(tǒng)瀏覽頁(yè)面,可以提供一種可以替換的方法。