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