常见的几种JavaBean及其使用

转载 2011年01月11日 23:16:00

引用:http://book.csdn.net/bookfiles/558/10055818584.shtml

6.3  常见的几种Bean使用方法

在实际使用中,有几种常用的Bean,比如表单Bean、页面Bean及共享Bean。在共享Bean中主要包括请求Bean、会话Bean及应用程序Bean。

6.3.1  表单Bean

表单Bean是用来处理表单的。编写Bean,如程序FormBean.java所示。

案例名称:表单Bean使用方法

程序名称:FormBean.java

package std;                                    //封包

import java.io.*;                               //引入包

public class FormBean implements Serializable      //最好实现Serializable接口

{

    //属性声明,都用private修饰

    private int id=0;

    private String nickname="";

 

    //公开的属性

    public void setId(int id)

    {

        this.id=id;

    }

    public int getId()

    {

        return id; 

    }

 

    public void setNickname(String name)

    {

        this.nickname=name;

    }

    public String getNickname()

    {

        return nickname;   

    }

}

这个Bean里面有两个属性,都是公开属性。编写JSP文件,使用这个Bean,如程序from.jsp所示。

案例名称:表单Bean使用方法

程序名称:form.jsp

<form action="" method="post">

    id:<input type=text name="id"><br>

    nickname:<input type=text name="nickname"><br>

    <input type=submit value="submit"/>

</form>

    <jsp:useBean id="st" class="std.FormBean"/>

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

    <hr/>

    <jsp:getProperty name="st" property="id"/><br>

    <jsp:getProperty name="st" property="nickname"/>

注意这里的Bean放在包std中,在Eclipse中创建好工程以后的目录结构如图6-10所示。

 

图6-10  使用表单Bean的目录结构

这种方法利用表单中对应name的表单域的值去填充Bean里面相应的属性。例子中,id被填充到Bean的id属性中,nickname被填充到Bean的nickname属性。打开时,读取了id的值0,nickname 默认为空。执行的结果如图6-11所示。

 

图6-11  使用setProperty动作

也可以使用jsp:setProperty动作对每一个属性设置值,如程序form1.jsp所示。

案例名称:表单Bean使用方法

程序名称:form1.jsp

<form action="" method="post">

    myid:<input type=text name="myid"><br>

    mynickname:<input type=text name="mynickname"><br>

<input type=submit value="submit"/>

</form>

    <jsp:useBean id="st" class="std.FormBean"/>

    <jsp:setProperty name="st"  property="id" param="myid"/>

    <jsp:setProperty name="st"  property="nickname" param="mynickname"/>

<hr/>

    <jsp:getProperty name="st" property="id"/><br>

    <jsp:getProperty name="st" property="nickname"/>

在这里,html表单的表单域名称与Bean中的属性并不一致,使用param来把html表单的表单域名称与Bean中的属性对应起来。运行结果如图6-12所示。

图6-12  调用表单Bean

表单Bean用来处理表单的填充。如果没有请求参数和属性对应(比如,修改FormBean,增加一个sex属性),则不采取任何动作,系统不会提供null作为属性的值。这意味着,表单Bean不需要一次填充完毕,可以只填充一部分属性。

自动 类型转换并不能像手动类型转换那样能够防止不合法的值。尽管自动类型转换很方便(从请求中获得的值为String类型,自动类型转换保证了上面的 String类型的id填充了int类型的id属性),很多开发人员还是避免使用自动转换,选择使用 String类型去定义Bean的每个属性。

Bean属性的名称和请求参数大小写敏感,书写错误就无法调用任何一个动作(id和ID是不同的)。

6.3.2  页面Bean

页面Bean为JSP保留数据,不实现应用程序流中的任何功能。在JSP和Servlet之间,有4种不同的范围值,如表6-1所示。

表6-1  Bean的4种不同范围

范围级别

所影响的 API

   

页面 page

服务方法中的本地变量

只用于正在处理的 Servlet ,无法通过这些方法在 JSP Servlet 之间共享数据

请求 request

request.setAttribute(key,obj)

request.getAttribute(key)

用于正在处理的 Servlet 和接受转发控制的 Servlet JSP

会话 session

session.setAttribute(key,obj)

session.getAttribute(key)

用于相同范围内的任何 Servlet JSP

应用程序 application

getServletContext()

setAttribute(key,obj)

getAttribute(key)

对象包含应用程序范围内的对象

6.3.3  共享Bean

可以这样去理解共享Bean的概念:在一个JSP页面(或Servelet)中修改了Bean的属性,然后在另一个页面中读取这个Bean的属性,可以看到这种变化。这是实现数据共享的一种重要方式,也是MVC架构的基础。

Bean 一共有4种范围(Scope):page、request、session和application。page对应于本页面的使用,是不可以共享的 Bean。后3种都可以共享,范围递增。第1种在request范围内共享,第2种在session范围内共享,第3种在整个应用程序中共享。在共享 Bean的应用中,使用forward和include 方法来完成请求的转发和包含。除了这两种方法之外,其他的方法是无效的或不建议使用的。这里所描述的案例是JSP之间共享Bean,也可以是JSP与 Servlet之间或Servlet与Servlet之间共享Bean。比如默认的页面Bean不能共享数据,如程序scopePagea.jsp所示。

案例名称:页面Bean

程序名称:scopePagea.jsp

<jsp:useBean id="st" class="std.FormBean"/>

<jsp:setProperty name="st"  property="id" value="999"/>

<jsp:forward page="scopePageb.jsp"/>

执行scopePagea.jsp的时候,自动转移到scopePageb.jsp页面。

案例名称:页面Bean

程序名称:scopePageb.jsp

<jsp:useBean id="st" class="std.FormBean"/>

<jsp:getProperty name="st" property="id"/><br>

scopePageb.jsp主要用来读取页面Bean的属性,运行结果如图6-13所示。

图6-13  Page范围

可以看到,在scopePageb.jsp中读取到的id属性值为0,这说明page范围的Bean无法共享。

1.请求Bean

请求Bean即Request Bean,是在request范围内共享数据的Bean。修改前面的例子,如程序scopeRequesta.jsp所示。

案例名称:请求Bean

程序名称:scopeRequesta.jsp

<jsp:useBean id="st" class="std.FormBean" scope="request"/>

<jsp:setProperty name="st"  property="id" value="999"/>

<jsp:forward page="scopeRequestb.jsp"/>

和页面Bean区别是使用Bean的时候带上了“scope="request"”,页面还是自动转到了scopeRequestb.jsp页面上。

案例名称:请求Bean

程序名称:scopeRequestb.jsp

<jsp:useBean id="st" class="std.FormBean" scope="request"/>

<jsp:getProperty name="st" property="id"/>

程序执行结果如图6-14所示。

图6-14  请求范围

发出 请求的JSP或Servlet修改的属性值在接受请求的JSP或Servlet中可以读出来,但是,如果两个程序之间没有发生请求关系的话,数据就无法共 享。如果编写一个独立的JSP程序,修改了Bean的属性值,scope为request。再写一个JSP程序,scope为request,它并不接受 第一个JSP的请求,无法读取修改了的Bean的属性值。

2.会话Bean

会话Bean属于应用程序的用户会话,与表示方式无关,但是却可以获得指向资源和其他数据的引用,这些数据有助于用户会话来维护和保存状态信息。例如,一个会话Bean可以通过会话保存用户的姓名和地址。

会话Bean即Session Bean,在session 范围内共享数据。它的作用范围比请求Bean大很多。即使两个文件没有发生请求关系,但是也可以共享数据,如程序scopeSessiona.jsp所示。

案例名称:会话Bean

程序名称:scopeSessiona.jsp

<jsp:useBean id="st" class="std.FormBean" scope="session"/>

<jsp:setProperty name="st"  property="id" value="999"/>

<a href="scopeSessionb.jsp">to b</a>

会话Bean使用“scope="session"”进行标识,单击超级链接后,自动转到另外一个页面,如程序scopeSessionb.jsp所示。

案例名称:会话Bean

程序名称:scopeSessionb.jsp

<jsp:useBean id="st" class="std.FormBean" scope="session"/>

<jsp:getProperty name="st" property="id"/>

运行结果如图6-15所示。

图6-15  会话范围

到另外一个页面后,同样可以看到Bean属性的值,如图6-16所示。

图6-16  会话范围

这里必须单击链接进入,否则两个页面不在相同的会话中,无法共享数据。

3.应用程序Bean

应用 程序Bean的作用范围比会话Bean要广,可以用来帮助应用程序的所有用户维持状态。与会话Bean相比,使用它们的机会少一些,但是,如果需要减少内 存的消耗或提升显示的效果,使用该应用程序Bean是非常有用的,特别是当许多用户需要存取资料而这些资料的获取成本相对较高时。

应用程序 Bean即Application Bean,在application 范围内共享数据。它的范围是最大的。两个文件没有发生请求关系,也不是连在一起的页面,但它们之间可以共享数据。因为application范围是整个应 用程序中的所有文件,如程序scopeApplicationa.jsp所示。

案例名称:应用程序Bean

程序名称:scopeApplicationa.jsp

<jsp:useBean id="st" class="std.FormBean" scope="application"/>

<jsp:setProperty name="st"  property="id" value="999"/>

这个页面中设置Bean属性的值,试图在另外一个页面中读取出来,其程序如下。

案例名称:应用程序Bean

程序名称:scopeApplicationb.jsp

<jsp:useBean id="st" class="std.FormBean" scope="application"/>

<jsp:getProperty name="st" property="id"/>

先执行scopeApplicationa.jsp,然后再执行scopeApplicationb.jsp,发现数据还是传过来了,如图6-17所示。

图6-17  应用程序范围Bean

<!-- page -->

相关文章推荐

JAVABEAN是什么和总结JAVABEAN的两种使用方式

原文:http://www.blogjava.net/flysky19/articles/88180.html 一、 javabean 是什么? Javabean 就是一个类,这个类就定义一系列 g...

IOS几种常见的实现扫描、生成二维码的方式(一、使用ZBar SDK)

IOS中的几种常见的扫描二维码方式(一、使用ZBar SDK)

使用webview几种常见的hybrid通信方式

说起hybrid大家不会陌生,主要意思就是native和h5混合开发。为什么要这样做呢?大家可以想象一下针对于同一个活动,如果使用纯native的开发方式,Android和iOS两边都要维护同一套界面...

使用CSS替代JS实现几种常见的特效

本文来源于博客:不要点我 为什么说能使用html/css解决的问题就不要使用JS呢?两个字,因为简单。简单就意味着更快的开发速度,更小的维护成本,同时往往具有更好的体验,下面介绍几个实例。 1. 导航...

几种常见数据库连接池的使用比较

感觉在介绍之前有必要阐述一下连接池的几个概念,有助于后边一些文字的理解。 最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源。由于频繁的打开和关闭连接对jvm包括数据库...

几种常见数据库连接池的使用比较

笔者曾经主持以及经历的几个产品及项目中,包括了各种数据库及应用服务器,基本上几种常见的数据库连接池都用到了,根据使用的情况把这些连接池比较一下吧。 感觉在介绍之前有必要阐述一下连接池的几个概念,...

数据库调优教程(九) 添加了索引但不被使用的几种常见可能

上一讲聊了什么时候不要使用索引,但有时候使用了也不见得会被使用。

使用WireShark分析HTTP协议时几种常见的汉字编码及其解码方法小结

在使用WireShark分析HTTP协议的过程中,我们自然是首先要完成解密(若是使用了SSL)、重组(若是经过分包)、解压(若是使用了压缩编码)【在Wireshark1.8以后的版本中对这些功能提供了...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)