一、 javabean 是什么?

Javabean 就是一個(gè)類,這個(gè)類就定義一系列 get<Name> set<Name> 方法。 So simple

Javabean 就是為了和 jsp 頁(yè)面?zhèn)鲾?shù)據(jù)化簡(jiǎn)交互過(guò)程而產(chǎn)生的。

自己的理解:

使用 javabean 和不用 javabean 的區(qū)別:

一個(gè) javabean 就是為 jsp 頁(yè)面上的元素一一開(kāi)辟一個(gè)空間,然后根據(jù)需要賦值、讀值。而如果不用 javabean ,就直接使用 HttpServlet request 對(duì)象:

只在 jsp 頁(yè)面間傳遞獲取數(shù)據(jù):

String name=req.getParameter(“name”);

顯示數(shù)據(jù): out.println(name);

存數(shù)據(jù)入 DB :在 jsp 中直接嵌入 java 代碼,用 insert 語(yǔ)句存入。

?

感覺(jué)就像當(dāng)年自己畢設(shè)做的 asp 代碼一樣。 .asp 頁(yè)面中一系列的 req.getParameter 代碼和嵌入一大堆的 sql 語(yǔ)句,代碼很亂,很難維護(hù)。

而使用 javabean 之后,優(yōu)勢(shì)也就是 java 的優(yōu)勢(shì):組件技術(shù),代碼重用,易于維護(hù)。(在 jsp 頁(yè)面中數(shù)據(jù)的顯示很清晰。)

?

具體 javabean 是什么?有待查資料

解決:

1 http://www.itlearner.com/article/2004/551.shtml

軟件組件就是指可以進(jìn)行獨(dú)立分離、易于重復(fù)使用的軟件部分。 JavaBean 就是一種基于 Java 平臺(tái)的軟件組件思想。

2 http://www.chinaitpower.com/A200507/2005-07-27/170233.html

JavaBean到底是個(gè)什么東西

1. ???? JavaBean與EJB
(1)JavaBean與EJB規(guī)范在以下方面有共同的目標(biāo):通過(guò)標(biāo)準(zhǔn)的設(shè)計(jì)模式推廣Java程序代碼,提升開(kāi)發(fā)過(guò)程和開(kāi)發(fā)工具之間的重復(fù)運(yùn)用性可攜性.但是這兩種規(guī)格的原始問(wèn)題卻是為了解決不同的問(wèn)題.
定義于JavaBean組件模型中的標(biāo)準(zhǔn)規(guī)范,被設(shè)計(jì)來(lái)產(chǎn)生可重復(fù)運(yùn)用的組件,而這些組件通常被用于IDE開(kāi)發(fā)工具,而且通常是可視化組件,當(dāng)然并不一定是可視化組件.
(2)EJB規(guī)范所定義的組件模弄,剛是用來(lái)開(kāi)發(fā)服務(wù)端的Java程序,由于EJB可能執(zhí)行在不同的服務(wù)器平臺(tái)上,包括無(wú)圖形的大型主機(jī)上,所以EJB無(wú)法使用類似AWT或SWING之類的圖形化程序庫(kù).

2. ???? JavaBean與類庫(kù)的區(qū)別:
(1)并不是所有有用的模塊都必須轉(zhuǎn)化成Bean.Bean主要是能被用來(lái)可視化操作去完成一些效果.
(2)類庫(kù)是一個(gè)提供函數(shù)操作給編程者的一個(gè)有效操作,但是并不能從可視化操作中來(lái)獲益.
(3)舉個(gè)例子來(lái)說(shuō):提供JDBC數(shù)據(jù)庫(kù)訪問(wèn)的API作為一個(gè)類庫(kù)比作為一個(gè)bean要好,因?yàn)镴DBC的核心是用一個(gè)可編程的API,并不是能夠直接展現(xiàn)于可視化操作.然而,寫一個(gè)數(shù)庫(kù)庫(kù)訪問(wèn)Bean在JDBC的頂層還是有意義的.例如,你可以寫一個(gè)能定制的"Select"bean以助于用戶去組成一個(gè)查詢語(yǔ)句,并且程序運(yùn)行時(shí)用JDBC去運(yùn)行這個(gè)查詢語(yǔ)句,并顯示結(jié)果集.

3. ???? 在可視化編程中,可以看出,組件是一段程序代碼,通過(guò)被存為class內(nèi),關(guān)鍵在程序開(kāi)發(fā)工具如何發(fā)現(xiàn)組件的屬性和事件.VB和Delphi都是通過(guò)某種機(jī)制來(lái)實(shí)現(xiàn)這點(diǎn)的,而Java則通過(guò)JavaBeans將可視化組件開(kāi)發(fā)帶進(jìn)了一個(gè)更高的境界,因?yàn)橐粋€(gè)Bean就是一個(gè)Class.針對(duì)以上的內(nèi)容,JavaBean有如下的規(guī)則

(1)針對(duì)一個(gè)名為xxx的屬性,你通常要寫兩個(gè)函數(shù),getXxx()和setXxx().
(2)你可以用get/set方式來(lái)處理boolean,可以用is來(lái)代替get.
(3)Bean的一般函數(shù)不需要遵守上述的命名規(guī)則,但是需要為public.
(4)對(duì)于事件,你可以使用Swing的監(jiān)聽(tīng)器作法來(lái)處理.

4. ???? JavaBean的體系結(jié)構(gòu)
JavaBean體系結(jié)構(gòu)是第一個(gè)全面的基于組件的標(biāo)準(zhǔn)模型之一.在集成的IDE中使JavaBean在設(shè)計(jì)時(shí)可以操作.組件模型見(jiàn)如下圖:

結(jié)合所查資料得到自己的體會(huì)和總結(jié):

(以后有問(wèn)題都google和baidu,唉這個(gè)問(wèn)題去年上J2EE課的時(shí)候,問(wèn)了很多同學(xué),包括蘇老師,他們都沒(méi)有很好的回答出來(lái)。)

1. ??? javabean是一種軟件組件,所謂組件也就是一個(gè)java類而已。就像一個(gè)機(jī)械零件一樣,可以重復(fù)的用它來(lái)組裝形成產(chǎn)品。但是并不是每個(gè)java類都是javabean組件。軟件組件是有一定的概念和體系結(jié)構(gòu)的。自己的理解是,javabean組件是定義了需要get和set方法等規(guī)則的組件,通過(guò)定義這些規(guī)則,可以實(shí)現(xiàn)發(fā)現(xiàn)組件屬性和事件的機(jī)制。

2. ???? 軟件組件的作用:只需編寫一回,各處都可執(zhí)行。

對(duì)于程序員來(lái)說(shuō),最好的一點(diǎn)就是 JavaBean 可以實(shí)現(xiàn)代碼的重復(fù)利用,另外對(duì)于程序的易維護(hù)性等等也有很重大的意義。

3. ?????? javabean 的特點(diǎn):

1. 執(zhí)行 java.io.Serializable 接口
   2. 提供無(wú)參數(shù)的構(gòu)造器
   3. 提供 get set 方法訪問(wèn)它的屬性 .

?

二、 javabean 的兩種使用方式:(嵌入 java 代碼方式和使用 jsp 標(biāo)記符方式)【也就是當(dāng)作普通的類來(lái)使用者在 jsp 頁(yè)面處理時(shí)有特殊的標(biāo)記符處理方式】

以下是使用 javabean 的每個(gè)功能的兩者不同方式比較:(用了 javabean 只是方便一點(diǎn),并且可以實(shí)現(xiàn)組件重用而已。)

a jsp 中使用 javabean 的類的兩種方法:(這兩行代碼的作用是一樣的)

法一: jsp 中使用 <jsp:useBean> 標(biāo)記符訪問(wèn) javabean

<jsp:useBean id="test" class="test.TestBean" />

?

法二: jsp 中嵌入 java 代碼方式訪問(wèn) javabean

首行導(dǎo)入 javabean

<%@ page import="com.javaBean.TestBean" %>

下邊就可以像在 java 語(yǔ)言中那樣用了:

<% TestBean testBean=new TestBean(); %>

?

b)jsp 頁(yè)面之間傳遞和獲取數(shù)據(jù)的兩種方法:

l???????? 獲取數(shù)據(jù):

法一:使用屬性標(biāo)記符:

<jsp:getProperty name="test" property="message" />

法二:直接嵌入 java 代碼:(更簡(jiǎn)單)

<%=testBean.getName()%>

l???????? 存數(shù)據(jù):

法一:使用屬性標(biāo)記符:

設(shè)置單個(gè)元素值:

<jsp:setProperty name="test" property="name" value="jcm" ?/>

設(shè)置 jsp 頁(yè)面中所有元素的值:

<jsp:setProperty name="test" property="*" />

注:這個(gè)方法特別方便,只需要在接收數(shù)據(jù)并負(fù)責(zé)顯示的 jsp 頁(yè)面使用 <jsp:useBean> 之后加上這一行代碼,所有數(shù)據(jù)就自動(dòng)賦值了。然后在接下來(lái)的 jsp 代碼中就可以使用 get 方法顯示出數(shù)據(jù)了。

法二:直接嵌入 java 代碼:

<%

String name=req.getParameter(“name”);

testBean.setName(name)

String pwd=req.getParameter(“password”);

testBean.setName(pwd)

?

%>

注:

通常 javabean 函數(shù)中除了 get set 方法外,還有一個(gè)把數(shù)據(jù)存入 DB 中的方法(也就是和 DB 連接并實(shí)現(xiàn) insert 語(yǔ)句)。

?

?

問(wèn)題:

1.?????? 一個(gè) javabean 當(dāng)作一個(gè)普通的類來(lái)使用,( import 類,通過(guò) new 方法構(gòu)造一個(gè)對(duì)象,然后通過(guò)對(duì)象調(diào)用方法),和通過(guò) jsp 標(biāo)記符 <jsp:useBean> 來(lái)使用有區(qū)別嗎?它和普通的類有什么區(qū)別呢? javabean 也可以通過(guò)普通類的使用方式來(lái)訪問(wèn)呀。上面總結(jié)的內(nèi)容就是這樣的呀。

2.?????? 是不是只有通過(guò)標(biāo)記符 <jsp:useBean> 來(lái)使用才能真正體檢 javabean 組件的優(yōu)勢(shì):自動(dòng)賦值?如果不使用標(biāo)記符 <jsp:useBean> 可以實(shí)現(xiàn)自動(dòng)賦值嗎?

有待實(shí)驗(yàn)解決。

解決:(終于明白過(guò)來(lái)了!)

參考資料:

http://www.faq-it.org/archives/jsp/52ae59e6bc6d13af9ee621213347274a.php

關(guān)于 javaBean 原理性的兩個(gè)問(wèn)題

作者 :bdsc


初次接觸 javaBean ,遇到了兩個(gè)原理性的問(wèn)題,沒(méi)有找到確定的資料得到答案,希望在這兒能得到大家的幫助。
?1
javaBean class 與普通 java class 有什么區(qū)別? javaBean 的類代碼有沒(méi)有明確的規(guī)定,比如一定要繼承什么類?如沒(méi)有那怎么說(shuō)一個(gè) java class javaBean ,或不是呢?
2
javaBean 是在客戶端執(zhí)行還是在服務(wù)器執(zhí)行呢?
2.1
如果在客戶端執(zhí)行,那是不是在客戶端一定要有 jvm ,并且要下載對(duì)應(yīng)的
javaBean
class 文件?但我怎么沒(méi)有在自己的系統(tǒng)盤中找不到相應(yīng) javaBean
class
文件呢?那 applet 也是在客戶端運(yùn)行,為什么要出現(xiàn) javaBean 呢?
2.2
如果在服務(wù)器執(zhí)行,那 javaBean 是在客戶端生成用戶界面而產(chǎn)生的,那服
務(wù)器端執(zhí)行的代碼怎么在客戶端生成用戶界面呢?
---------------------------------------------------------------

1
對(duì)于 javaBean 于普通 java class 類的分別并非很明確 主要是 javabean 通常在 jsp 頁(yè)面上有特殊的引用方法。
2 javabean 是在服務(wù)器端執(zhí)行的。 javabean 并不直接生成用戶界面(那是 applet 做的事情),而通常只做數(shù)據(jù)的組織、處理工作。然后通過(guò) jsp 頁(yè)面來(lái)生成用戶的界面。

以上只是我個(gè)人的理解。我也希望與大家一起討論。
---------------------------------------------------------------

javaBean
是一種(符合要求的) java

*.jsp
在服務(wù)器端編譯運(yùn)行,通過(guò)封裝的 socket (你看到的是 outputStream/ 名字也許不正確 一類的對(duì)象)向客戶( webbrowser __ie/navigator) 發(fā)送普通字符流(按 http 協(xié)議 ), 這個(gè)字符流由瀏覽器接受,解釋然后按一定的格式顯示
---------------------------------------------------------------

1
javaBean class 與普通 java class 有什么區(qū)別? javaBean 的類代碼有沒(méi)有明確的規(guī)定,比如一定要繼承什么類?如沒(méi)有那怎么說(shuō)一個(gè) java class javaBean ,或不是呢?
javaBean
其實(shí)就是一個(gè) JAVA 程序。可以在 JSP 里面調(diào)用。
ENterprise JavaBean
是用于構(gòu)建企業(yè)應(yīng)用的 EJB 。必須在應(yīng)用服務(wù)器上面部署。

2
javaBean 是在客戶端執(zhí)行還是在服務(wù)器執(zhí)行呢?
javaBean
是在服務(wù)器執(zhí)行,返回給客戶端的只是 HTML 代碼。
如果要在客戶端執(zhí)行,可以用 APPLET
---------------------------------------------------------------

sun
很早提出的 javabean 的概念是解決可視的 application 的模塊化提出來(lái)的,但由于 java 在客戶端開(kāi)發(fā)實(shí)在不怎么樣,所以 sun 沒(méi)有在這方面再進(jìn)行,作為界面模塊化開(kāi)發(fā)的 javabean 實(shí)際上已經(jīng)死了。(以上純粹個(gè)人觀點(diǎn),歡迎批評(píng))

但是隨著 web 應(yīng)用的興起 jsp 的出現(xiàn), jsp 需要這樣的概念,功能 / 表現(xiàn)分開(kāi),將功能封裝在一個(gè)模塊中,以便實(shí)現(xiàn)最大化的代碼復(fù)用,就又拾起這個(gè) javabean 將它用在 web/jsp 開(kāi)發(fā)上。

你提到的那篇文章所說(shuō)的是可視化的 javabean 用在 applet 里的情況 ,以后你可以在心理分清楚(因?yàn)橐苍S沒(méi)人這樣看)別人說(shuō)的是那種 javabean

至于具體符合什么要求,說(shuō)實(shí)話我不知道(因?yàn)槲覀€(gè)人不贊成用 javabean 的)

?

自己的總結(jié):

1. javaBean 是一種(符合要求的) java 類。 javaBean 與普通 java class 類的分別并非很明確,主要是 javabean 通常在 jsp 頁(yè)面上有特殊的引用方法。

2. 所以 javabean 既可以當(dāng)作普通的類來(lái)使用,也可以在 jsp 頁(yè)面上有特殊的引用方法。

3.?????? 對(duì)于第三個(gè)問(wèn)題:是不是只有通過(guò)標(biāo)記符 <jsp:useBean> 來(lái)使用才能真正體檢 javabean 組件的優(yōu)勢(shì):自動(dòng)賦值?如果不使用標(biāo)記符 <jsp:useBean> 可以實(shí)現(xiàn)自動(dòng)賦值嗎?

答:不是的。 Jsp 的自動(dòng)賦值是指:通過(guò) <jsp:setProperty name=”myBean” property=”*” /> 這個(gè)屬性訪問(wèn)標(biāo)記符就可以輕松實(shí)現(xiàn)對(duì) jsp 頁(yè)面上所有參數(shù)的賦值,方便一點(diǎn),而如果用普通類的訪問(wèn)方式,需要一一獲取各項(xiàng)值,一一調(diào)用 set 方法而已。比如:

<%

StuInfoBean stuInfoBean=new StuInfoBean();

String stuNo=request.getParameter("stuNo");

String stuName=request.getParameter("stuName");

stuInfoBean.setStuNo(stuNo);

stuInfoBean.setStuName(stuName);

%>

4.?????? 所以 javabean 只是一個(gè)符合必須有 set get 方法,并且可以在 jsp 上有特殊引用方式的 java 類。

二、 一個(gè)例子,分別使用 jsp 特殊引用方式和普通類的使用方式來(lái)實(shí)現(xiàn)對(duì) javabean 的調(diào)用:

主要的區(qū)別在于兩個(gè)地方:

1 對(duì)類的使用:

l???????? jsp 標(biāo)記符方式:使用 <jsp:useBean />

l???????? 普通類方式: <%@ page import="com.javaBean.StuInfoBean" %>

2 對(duì)屬性的賦值:

l???????? jsp 標(biāo)記符方式: <jsp:setProperty name="stuInfoBean" property="*" />

l???????? 普通類方式:

<%

StuInfoBean stuInfoBean=new StuInfoBean();

String stuNo=request.getParameter("stuNo");

String stuName=request.getParameter("stuName");

stuInfoBean.setStuNo(stuNo);

stuInfoBean.setStuName(stuName);

%>

具體代碼如下:

1.?????? 使用 jsp 特殊引用方式 StuInfo.jsp

<% @?page?contentType = " text/html;charset=GBK " ? %>

< html >

< head >

< title > I?use?javabean?individually </ title >

</ head >

< jsp:useBean?id = " stuInfoBean " ?scope = " session " ? class = " com.javaBean.StuInfoBean " ?? />

< jsp:setProperty?name = " stuInfoBean " ?property = " * " ? /> ?

< body >

< center >

< form?name = " myForm " ?action = " test.jsp " >

< table >

< tr >

< td >

stuNo?is:?

</ td >

< td >

< input?type = " text " ?size = 20 ?name = " stuNo " ?value = "" >

</ td >

</ tr >

< tr >

< td >

stuName?is:?

</ td >

< td >

< input?type = " text " ?size = 20 ?name = " stuName " ?value = "" >

</ td >

</ tr >

< tr >

< td >

< input?type = " submit " ???value = " 顯示 " >

</ td >

</ tr >

</ table >

</ form >

< hr >

< table >

< tr >

< td >

stuNo?is:?

</ td >

< td >

<%= stuInfoBean.getStuNo() %>

</ td >

</ tr >

< tr >

< td >

stuName?is:?

</ td >

< td >

<%= stuInfoBean.getStuName() %>

</ td >

</ tr >

</ table >

</ center >

</ body >

</ html >

2.?????? 普通類的使用方式 StuInfo.jsp

<% @?page?contentType = " text/html;charset=GBK " ? %>

<% @?page? import = " com.javaBean.StuInfoBean " ? %>

< html >

< head >

< title > I?use?javabean?individually </ title >

</ head >

< body >

< center >

<%

StuInfoBean?stuInfoBean
= new ?StuInfoBean();

String?stuNo
= request.getParameter( " stuNo " );

String?stuName
= request.getParameter( " stuName " );

stuInfoBean.setStuNo(stuNo);

stuInfoBean.setStuName(stuName);

%>

?

?

< form?name = " myForm " ?action = " StuInfo.jsp " >

< table >

< tr >

< td >

stuNo?is:?

</ td >

< td >

< input?type = " text " ?size = 20 ?name = " stuNo " ?value = "" >

</ td >

</ tr >

< tr >

< td >

stuName?is:?

</ td >

< td >

< input?type = " text " ?size = 20 ?name = " stuName " ?value = "" >

</ td >

</ tr >

< tr >

< td >

< input?type = " submit " ???value = " 顯示 " >

</ td >

</ tr >

</ table >

</ form >

?

< hr >

< table >

< tr >

< td >

stuNo?is:?

</ td >

< td >

<%= stuInfoBean.getStuNo() %>

</ td >

</ tr >

< tr >

< td >

stuName?is:?

</ td >

< td >

<%= stuInfoBean.getStuName() %>

</ td >

</ tr >

< table >

</ center >

</ body >

</ html >

?

3.?????? 運(yùn)行效果: