zoukankan      html  css  js  c++  java
  • (转)javabean是什么和总结javabean的两种使用方式

    一、 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

    <% @ 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 >
  • 相关阅读:
    【纯水题】POJ 1852 Ants
    【树形DP】BZOJ 1131 Sta
    【不知道怎么分类】HDU
    【树形DP】CF 1293E Xenon's Attack on the Gangs
    【贪心算法】CF Emergency Evacuation
    【思维】UVA 11300 Spreading the Wealth
    【树形DP】NOI2003 逃学的小孩
    【树形DP】BZOJ 3829 Farmcraft
    【树形DP】JSOI BZOJ4472 salesman
    【迷宫问题】CodeForces 1292A A NEKO's Maze Game
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2455622.html
Copyright © 2011-2022 走看看