JavaBean
来源:互联网 发布:深圳云智数据 编辑:程序博客网 时间:2024/06/07 23:34
JAVABEAN是什么和总结JAVABEAN的两种使用方式06-7-23
一、 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 是什么?有待查资料
解决:
1 ) http://www.itlearner.com/article/2004/551.shtml
软件组件就是指可以进行独立分离、易于重复使用的软件部分。 JavaBean 就是一种基于 Java 平台的软件组件思想。
2 ) http://www.chinaitpower.com/A200507/2005-07-27/170233.html
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> 可以实现自动赋值吗?
有待实验解决。
解决:(终于明白过来了!)
参考资料:
http://www.faq-it.org/archives/jsp/52ae59e6bc6d13af9ee621213347274a.php
关于 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 ) :
< 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 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 >
從Java語言的角度來看,JavaBean是一個純綷的Java類別,它遵守一些規則與命名方式,例如它是一個公開
的類別,具有公開的setter與getter方法,支援事件處理等等,JavaBean是一個可重用的元件,可用於設計
使用者介面元件,或是運用於JSP網頁中邏輯處理與資料攜帶。
對於動態網頁來說,如果它又要負責網頁內容的生成,又要負責資料的處理與保存,最後常導致的結果就是頁面
呈現的部份與程式的邏輯處理,以及資料物件的處理等混合在一起,對於必須相互合作的網頁設計人員與
程式設計人員來說都是一種困擾,JavaBean的作用之一,就是希望將程式的邏輯處理與呈現部份分開,
對於JSP的設計人員來說,應儘量利用JavaBean等技術(也就是還有其它的技術)來分離程式與網頁的呈現。
JavaBean的撰寫就如一般的Java程式,我們先撰寫一個簡單的Java類,其作用為尋找兩個數的最大公因數:
package beantools.math;public class FindGCD { private int m, n; public void setM(int m) { this.m = m; } public void setN(int n) { this.n = n; } public int getGCD() { int r = 0; while(n != 0) { r = m % n; m = n; n = r; } return m; }}
注意在JSP 2.0之後,JavaBean的類別一定要有package加以管理;上面這個類別所擁有的方法都是公開的,
而且使用setXXX()與getXXX()的方式來命名,將這個類別編譯完成後,您將類別*.class放置於Web應用程式
的WEB-INF/classes/資料夾中,注意由於我們設定package為beantools.math,所以最後您的*.class
應該路徑應該是WEB-INF/classes/beantools/math/FindGCD.class,接下來我們在JSP網頁中將這個類別
當作JavaBean來使用,我們撰寫以下這個JSP網頁程式:
<jsp:useBean id="gcd" class="beantools.math.FindGCD" /><jsp:setProperty name="gcd" property="*" /><%= request.getParameter("m") %> 與 <%= request.getParameter("n") %>最大公因數:<jsp:getProperty name="gcd" property="GCD" />
<jsp:useBean>標籤是用來呼叫JavaBean的方法,id用於指定JavaBean實例的參考名稱,它實際將轉換為
Servlet中的一個物件參考名稱,class用以指定您的JavaBean將實例化哪一個類別,在執行JSP網頁時,
它會檢查JavaBean的實例是否已經存在,如果不存在,則實例化一個JavaBean。
<jsp:setProperty>標籤用於給JavaBean設定屬性值,name用於指定您要使用哪一個參考名稱所參考至的
JavaBean實例;在屬性設定時我們使用了introspection機制,在property設定"*",表示將自動尋找
request中符合JavaBean中setter名稱的參數值,即如果request的參數名稱若符合setXXX()中XXX名稱,
則將request中對應的值設定給setXXX()。
<jsp:getProperty>則用來取得JavaBean所攜帶的屬性值,name用於指定您要使用哪一個參考名稱所參考至
的JavaBean實例,在property中指定的是要哪一個屬性值,即如果指定為XXX,則使用getXXX()方法取得值。
我們直接在網址列上發送以下的訊息即可求得最大公因數:
http://localhost:8080/myjsp/javabeandemo.jsp?m=100&n=14
所傳回的內容如下:
100 與 14 最大公因數:2
如上所示的,使用JavaBean,我們可以將部份的程式邏輯移至JavaBean中,而不用在JSP網頁中直接撰寫程式
邏輯,只要在JSP網頁中使用<jsp:useBean>、<jsp:setProperty>與<jsp:getProperty>等標籤,標籤的
使用在HTML網頁中比較直觀,不會帶有太多的程式邏輯部份,可以實現「部份的」視圖與邏輯分離的目的
(僅靠JavaBean要達到完全的分離仍有困難)。
要注意的是,每當您的JavaBean程式內容改變並重新編譯後,Container不一定會知道JavaBean的內容已經
改變,也就不會重新載入改變後新的類別,這是使用JavaBean的缺點之一,解決的方法就是重新啟動
Container,讓Container重新載入改變後的JavaBean。
- JavaBean
- JAVABEAN
- JavaBean
- javabean
- JAVABEAN
- javabean
- javabean
- JavaBean
- JavaBean
- javabean
- JavaBean
- JavaBean
- JavaBean
- JavaBean
- JavaBean
- JavaBean
- JavaBean
- javaBean
- 通过SSH协议访问远程Shell脚本-免密码登陆与返回数据丢失解决
- 使用程序备份服务器端数据库文件和其他文件一 - asp.net 教程
- DataView的RowFilter用法
- Oracle Spatial 产品概要以及使用概述
- 关闭主程序时如何关闭子线程
- JavaBean
- 等待队列学习笔记(转载)
- linux进程通讯-共享内存
- U盘安装windows xp
- 系统还被装了还原卡
- MVS的存储机制和Catalog error checking
- 电脑管理员密码忘记了,有什么办法破解吗
- unix编程笔记
- 人人都有好工作:IT行业求职面试必读