一、
javabean
是什么?
Javabean
就是一個類,這個類就定義一系列
get<Name>
和
set<Name>
方法。
So simple
!
Javabean
就是為了和
jsp
頁面?zhèn)鲾?shù)據(jù)化簡交互過程而產(chǎn)生的。
自己的理解:
使用
javabean
和不用
javabean
的區(qū)別:
一個
javabean
就是為
jsp
頁面上的元素一一開辟一個空間,然后根據(jù)需要賦值、讀值。而如果不用
javabean
,就直接使用
HttpServlet
的
request
對象:
只在
jsp
頁面間傳遞獲取數(shù)據(jù):
String name=req.getParameter(“name”);
顯示數(shù)據(jù):
out.println(name);
存數(shù)據(jù)入
DB
:在
jsp
中直接嵌入
java
代碼,用
insert
語句存入。
?
感覺就像當(dāng)年自己畢設(shè)做的
asp
代碼一樣。
.asp
頁面中一系列的
req.getParameter
代碼和嵌入一大堆的
sql
語句,代碼很亂,很難維護。
而使用
javabean
之后,優(yōu)勢也就是
java
的優(yōu)勢:組件技術(shù),代碼重用,易于維護。(在
jsp
頁面中數(shù)據(jù)的顯示很清晰。)
?
具體
javabean
是什么?有待查資料
解決:
1
)
http://www.itlearner.com/article/2004/551.shtml
軟件組件就是指可以進行獨立分離、易于重復(fù)使用的軟件部分。
JavaBean
就是一種基于
Java
平臺的軟件組件思想。
2
)
http://www.chinaitpower.com/A200507/2005-07-27/170233.html
JavaBean到底是個什么東西
1.
????
JavaBean與EJB
(1)JavaBean與EJB規(guī)范在以下方面有共同的目標(biāo):通過標(biāo)準(zhǔn)的設(shè)計模式推廣Java程序代碼,提升開發(fā)過程和開發(fā)工具之間的重復(fù)運用性可攜性.但是這兩種規(guī)格的原始問題卻是為了解決不同的問題.
定義于JavaBean組件模型中的標(biāo)準(zhǔn)規(guī)范,被設(shè)計來產(chǎn)生可重復(fù)運用的組件,而這些組件通常被用于IDE開發(fā)工具,而且通常是可視化組件,當(dāng)然并不一定是可視化組件.
(2)EJB規(guī)范所定義的組件模弄,剛是用來開發(fā)服務(wù)端的Java程序,由于EJB可能執(zhí)行在不同的服務(wù)器平臺上,包括無圖形的大型主機上,所以EJB無法使用類似AWT或SWING之類的圖形化程序庫.
2.
????
JavaBean與類庫的區(qū)別:
(1)并不是所有有用的模塊都必須轉(zhuǎn)化成Bean.Bean主要是能被用來可視化操作去完成一些效果.
(2)類庫是一個提供函數(shù)操作給編程者的一個有效操作,但是并不能從可視化操作中來獲益.
(3)舉個例子來說:提供JDBC數(shù)據(jù)庫訪問的API作為一個類庫比作為一個bean要好,因為JDBC的核心是用一個可編程的API,并不是能夠直接展現(xiàn)于可視化操作.然而,寫一個數(shù)庫庫訪問Bean在JDBC的頂層還是有意義的.例如,你可以寫一個能定制的"Select"bean以助于用戶去組成一個查詢語句,并且程序運行時用JDBC去運行這個查詢語句,并顯示結(jié)果集.
3.
????
在可視化編程中,可以看出,組件是一段程序代碼,通過被存為class內(nèi),關(guān)鍵在程序開發(fā)工具如何發(fā)現(xiàn)組件的屬性和事件.VB和Delphi都是通過某種機制來實現(xiàn)這點的,而Java則通過JavaBeans將可視化組件開發(fā)帶進了一個更高的境界,因為一個Bean就是一個Class.針對以上的內(nèi)容,JavaBean有如下的規(guī)則:
(1)針對一個名為xxx的屬性,你通常要寫兩個函數(shù),getXxx()和setXxx().
(2)你可以用get/set方式來處理boolean,可以用is來代替get.
(3)Bean的一般函數(shù)不需要遵守上述的命名規(guī)則,但是需要為public.
(4)對于事件,你可以使用Swing的監(jiān)聽器作法來處理.
4.
????
JavaBean的體系結(jié)構(gòu)
:
JavaBean體系結(jié)構(gòu)是第一個全面的基于組件的標(biāo)準(zhǔn)模型之一.在集成的IDE中使JavaBean在設(shè)計時可以操作.組件模型見如下圖:
結(jié)合所查資料得到自己的體會和總結(jié):
(以后有問題都google和baidu,唉這個問題去年上J2EE課的時候,問了很多同學(xué),包括蘇老師,他們都沒有很好的回答出來。)
1.
???
javabean是一種軟件組件,所謂組件也就是一個java類而已。就像一個機械零件一樣,可以重復(fù)的用它來組裝形成產(chǎn)品。但是并不是每個java類都是javabean組件。軟件組件是有一定的概念和體系結(jié)構(gòu)的。自己的理解是,javabean組件是定義了需要get和set方法等規(guī)則的組件,通過定義這些規(guī)則,可以實現(xiàn)發(fā)現(xiàn)組件屬性和事件的機制。
2.
????
軟件組件的作用:只需編寫一回,各處都可執(zhí)行。
對于程序員來說,最好的一點就是
JavaBean
可以實現(xiàn)代碼的重復(fù)利用,另外對于程序的易維護性等等也有很重大的意義。
3.
??????
javabean
的特點:
1.
執(zhí)行
java.io.Serializable
接口
2.
提供無參數(shù)的構(gòu)造器
3.
提供
get
和
set
方法訪問它的屬性
.
?
二、
javabean
的兩種使用方式:(嵌入
java
代碼方式和使用
jsp
標(biāo)記符方式)【也就是當(dāng)作普通的類來使用或者在
jsp
中
頁面處理時有特殊的標(biāo)記符處理方式】
以下是使用
javabean
的每個功能的兩者不同方式比較:(用了
javabean
只是方便一點,并且可以實現(xiàn)組件重用而已。)
a
)
jsp
中使用
javabean
的類的兩種方法:(這兩行代碼的作用是一樣的)
法一:
jsp
中使用
<jsp:useBean>
標(biāo)記符訪問
javabean
:
<jsp:useBean id="test" class="test.TestBean" />
?
法二:
jsp
中嵌入
java
代碼方式訪問
javabean
:
首行導(dǎo)入
javabean
:
<%@ page import="com.javaBean.TestBean" %>
下邊就可以像在
java
語言中那樣用了:
<% TestBean testBean=new TestBean(); %>
?
b)jsp
頁面之間傳遞和獲取數(shù)據(jù)的兩種方法:
l????????
獲取數(shù)據(jù):
法一:使用屬性標(biāo)記符:
<jsp:getProperty name="test" property="message" />
法二:直接嵌入
java
代碼:(更簡單)
<%=testBean.getName()%>
l????????
存數(shù)據(jù):
法一:使用屬性標(biāo)記符:
設(shè)置單個元素值:
<jsp:setProperty name="test" property="name" value="jcm" ?/>
設(shè)置
jsp
頁面中所有元素的值:
<jsp:setProperty name="test" property="*" />
注:這個方法特別方便,只需要在接收數(shù)據(jù)并負責(zé)顯示的
jsp
頁面使用
<jsp:useBean>
之后加上這一行代碼,所有數(shù)據(jù)就自動賦值了。然后在接下來的
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
方法外,還有一個把數(shù)據(jù)存入
DB
中的方法(也就是和
DB
連接并實現(xiàn)
insert
語句)。
?
?
問題:
1.??????
一個
javabean
當(dāng)作一個普通的類來使用,(
import
類,通過
new
方法構(gòu)造一個對象,然后通過對象調(diào)用方法),和通過
jsp
標(biāo)記符
<jsp:useBean>
來使用有區(qū)別嗎?它和普通的類有什么區(qū)別呢?
javabean
也可以通過普通類的使用方式來訪問呀。上面總結(jié)的內(nèi)容就是這樣的呀。
2.??????
是不是只有通過標(biāo)記符
<jsp:useBean>
來使用才能真正體檢
javabean
組件的優(yōu)勢:自動賦值?如果不使用標(biāo)記符
<jsp:useBean>
可以實現(xiàn)自動賦值嗎?
有待實驗解決。
解決:(終于明白過來了!)
參考資料:
http://www.faq-it.org/archives/jsp/52ae59e6bc6d13af9ee621213347274a.php
關(guān)于
javaBean
原理性的兩個問題
作者
:bdsc
初次接觸
javaBean
,遇到了兩個原理性的問題,沒有找到確定的資料得到答案,希望在這兒能得到大家的幫助。
?1
、
javaBean
的
class
與普通
java
的
class
有什么區(qū)別?
javaBean
的類代碼有沒有明確的規(guī)定,比如一定要繼承什么類?如沒有那怎么說一個
java
的
class
是
javaBean
,或不是呢?
2
、
javaBean
是在客戶端執(zhí)行還是在服務(wù)器執(zhí)行呢?
2.1
如果在客戶端執(zhí)行,那是不是在客戶端一定要有
jvm
,并且要下載對應(yīng)的
javaBean
的
class
文件?但我怎么沒有在自己的系統(tǒng)盤中找不到相應(yīng)
javaBean
的
class
文件呢?那
applet
也是在客戶端運行,為什么要出現(xiàn)
javaBean
呢?
2.2
如果在服務(wù)器執(zhí)行,那
javaBean
是在客戶端生成用戶界面而產(chǎn)生的,那服
務(wù)器端執(zhí)行的代碼怎么在客戶端生成用戶界面呢?
---------------------------------------------------------------
1
、對于
javaBean
于普通
java
的
class
類的分別并非很明確
,主要是
javabean
通常在
jsp
頁面上有特殊的引用方法。
2
、
javabean
是在服務(wù)器端執(zhí)行的。
javabean
并不直接生成用戶界面(那是
applet
做的事情),而通常只做數(shù)據(jù)的組織、處理工作。然后通過
jsp
頁面來生成用戶的界面。
以上只是我個人的理解。我也希望與大家一起討論。
---------------------------------------------------------------
javaBean
是一種(符合要求的)
java
類
*.jsp
在服務(wù)器端編譯運行,通過封裝的
socket
(你看到的是
outputStream/
名字也許不正確
一類的對象)向客戶(
webbrowser __ie/navigator)
發(fā)送普通字符流(按
http
協(xié)議
),
這個字符流由瀏覽器接受,解釋然后按一定的格式顯示
---------------------------------------------------------------
1
、
javaBean
的
class
與普通
java
的
class
有什么區(qū)別?
javaBean
的類代碼有沒有明確的規(guī)定,比如一定要繼承什么類?如沒有那怎么說一個
java
的
class
是
javaBean
,或不是呢?
javaBean
其實就是一個
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
的模塊化提出來的,但由于
java
在客戶端開發(fā)實在不怎么樣,所以
sun
沒有在這方面再進行,作為界面模塊化開發(fā)的
javabean
實際上已經(jīng)死了。(以上純粹個人觀點,歡迎批評)
但是隨著
web
應(yīng)用的興起
jsp
的出現(xiàn),
jsp
需要這樣的概念,功能
/
表現(xiàn)分開,將功能封裝在一個模塊中,以便實現(xiàn)最大化的代碼復(fù)用,就又拾起這個
javabean
將它用在
web/jsp
開發(fā)上。
你提到的那篇文章所說的是可視化的
javabean
用在
applet
里的情況
,以后你可以在心理分清楚(因為也許沒人這樣看)別人說的是那種
javabean
。
至于具體符合什么要求,說實話我不知道(因為我個人不贊成用
javabean
的)
?
自己的總結(jié):
1. javaBean
是一種(符合要求的)
java
類。
javaBean
與普通
java
的
class
類的分別并非很明確,主要是
javabean
通常在
jsp
頁面上有特殊的引用方法。
2.
所以
javabean
既可以當(dāng)作普通的類來使用,也可以在
jsp
頁面上有特殊的引用方法。
3.??????
對于第三個問題:是不是只有通過標(biāo)記符
<jsp:useBean>
來使用才能真正體檢
javabean
組件的優(yōu)勢:自動賦值?如果不使用標(biāo)記符
<jsp:useBean>
可以實現(xiàn)自動賦值嗎?
答:不是的。
Jsp
的自動賦值是指:通過
<jsp:setProperty name=”myBean” property=”*” />
這個屬性訪問標(biāo)記符就可以輕松實現(xiàn)對
jsp
頁面上所有參數(shù)的賦值,方便一點,而如果用普通類的訪問方式,需要一一獲取各項值,一一調(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
只是一個符合必須有
set
和
get
方法,并且可以在
jsp
上有特殊引用方式的
java
類。
二、
一個例子,分別使用
jsp
特殊引用方式和普通類的使用方式來實現(xiàn)對
javabean
的調(diào)用:
主要的區(qū)別在于兩個地方:
1
)
對類的使用:
l????????
jsp
標(biāo)記符方式:使用
<jsp:useBean />
l????????
普通類方式:
<%@ page import="com.javaBean.StuInfoBean" %>
2
)
對屬性的賦值:
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.??????
運行效果: