第五章 JSP与JavaBean

目录

简介

5.1 编写和使用 JavaBean 

5.1.1 编写 JavaBean

5.1.2 保存 bean 的字节码

5.1.3 创建和使用 bean

5.2 获取和修改 bean 的属性

5.2.1 getProperty 动作标记

5.2.2 setProperty 动作标记

5.3 bean 的辅助类


简介

    按照 SUN 公司的定义,JavaBean 是一个可重复使用的软件组件.实际上 JavaBean 是一种 JAVA 类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称 bean.由于 JavaBean 是基于 JAVA 语言的,因此 JavaBean 不依赖平台,具有以下特点:

  • 可以实现代码的重复使用.
  • 易编写 易维护 易使用.
  • 可以在任何安装了 JAVA 运行环境的平台上的使用,而无需重新编译.

5.1 编写和使用 JavaBean 

5.1.1 编写 JavaBean

    编写 JavaBean 就是编写一个 JAVA 的类,所以只要会写类就能编写一个 JavaBean.这个类创建的一个对象称为一个 JavaBean,简称bean,分配给 bean 的变量,也称为 bean 属性.为了能让使用 bean 的应用程序构建工具使用 JSP动作标记知道 bean 的属性和方法,在类的命名上需要遵循以下的规则:

  1. 如果类的成员变量的名字是xxx,那么为了获取或更改 bean 的属性的值,类中必须提供两个方法:getXxx( ),用来获取属性xxx;setXxx( )用来修改属性xxx.也就是方法的名字用 get 和 set 为前缀,后缀是降属性的名字的首字母大写的字符序列.
  2. 类中所定义的方法的访问权限都必须是 public 的.
  3. 类中必须有一个构造方法是 public,无参数的.

    下面编写一个创建 bean 的 JAVA 类,并说明在 JSP 中怎样使用这个类创建一个 bean.要求创建 bean 的类带有包名,即 JAVA 源文件须使用 package 语句给出包名,例如:

package gping;

package tom.jiafei;

    以下是用来创建 bean 的一个 JAVA 源文件

package tom.jiafei;
public class Circle{
double radius;
ppublic Circle(){
    radius = 1;
}
public double getRadius(){
    return radius;
}
public void setRadius(double newRadius){
    radius = newRadius;
}
public double circleArea(){
    return Math.PI*radius*radius;
}
public double circleLength(){
    return 2.0*Math.PI*radius;
}
}

注:保存 JAVA 文件时,"保存类型"选择为"所有文件",将"编码"选择为"ANSI".

5.1.2 保存 bean 的字节码

    为了使 JSP 页面使用 bean,Tomcat 服务器必须使用相应的字节码文件创建一个对象,即创建一个bean.为了让 Tomcat 服务器能够找到字节码文件,字节码文件必须保存在特定的目录中.例如:

ch5\WEB-INF\classes目录下,根据包名对应的路径,在 classes 目录下在创建相应的子目录.

    需要用命令行编译 Circle.java:

classes>javac tom\jiafei\Circle.java

5.1.3 创建和使用 bean

1· 使用 bean

    使用 JSP 动作标记 useBean 加载使用 bean,语法格式是:

<jsp:usebean id = "bean 的名字" class = "创建 bean 的类" scope = "bean 有效范围"/>

<jsp:usebean id = "bean 的名字" class = "创建 bean 的类" scope = "bean 有效范围">

</jsp:usebean>

例如:

<jsp:usebean id = "circle" class = "tom.jiafei.Circle" scope = "page"/>

注:其中"创建 JAVA 的类"要带有包名,例子如上.

2· bean 的加载原理

    当 JSP 页面使用 JSP 动作标记 useBean 加载一个 bean 时,Tomcat 服务器首先根据 JSP 动作标记 useBean 中 id 给出的 bean 名字 以及 scope 给出的使用范围,在 Tomcat 服务器管理的pageContent 内置对象中查找是否含有这样的 bean.如果存在,Tomcat 服务器就复制这个 bean 给 JSP页面,就是常说的 Tomcat 服务器分配这样的 bean 给 JSP 页面.如果在 pageContent中没有查找到JSP动作标记要求的 bean,就根据 class 指定的类创建一个 bean,并将所创建的 bean 添加到pageContent 中.可以看出首次创建一个新的 bean 需要用相应类的字节码文件创建对象,当某些 JSP 页面再需要同样的 bean 时,Tomcat 服务器直接将 pageContent 中已经有的 bean 分配给 JSP页面,从而提高 JSP 页面 bean 的使用效率.

3· bean 的有效范围和生命周期

    scope 的取值范围给出了 bean 的生命周期,即 scope 屈指决定了 Tomcat服务器分配给用户的 bean 的有效范围和生命周期,因此需要理解 scope 取值的具体意义.下面将对 scope 取值的不同进行说明.

(1) page bean.scope 的取值为 page 的 bean 称为 page bean,page bean 的有效范围是用户访问的当前页面,存活时间直到当前页面执行完毕.Tomcat 服务器分配给每个 JSP 页面的 page bean 是互不相同的.换言之,尽管每个 JSP 也免得 page bean 的功能相同,但它们占有不同的内存空间.page bean 的有效范围是当前页面,当页面执行完毕时,Tomcat 取消分配的 page bean,即释放 page bean 占有的内存空间.(注:不同用户的page bean 是互不相同的.也就是说,当两个用户同时访问同一个 JSP 页面时,一个用户对自己 page bean 的属性的改变,不会影响到另一个用户)

(2)session bean。scope 取值为 session 的 bean 称为 session bean,session bean 的有效范围是用户访问的 Web 服务目录下的各个页面,存活时间是用户的会话期间,直到用户的会话消失(session 对象达到了最大生存时间或用户关闭自己的浏览器以及服务器关闭)。如果用户访问 Web 服务目录多个页面,那么每个页面 id 相同的 session bean 是同一个 bean。因此,用户在某个页面更改了这个 session bean 的属性值,其他页面的这个 session bean 的属性值也将发生同样的变化。当用户的会话消失,Tomcat 服务器取消所分配的 session bean,即释放 session bean 所占有的内存空间。也就是说,当两个用户同时访问同一个 Web 服务目录,一个用户对自己 session bean 属性的改变,不会影响到另一个用户(一个用户在不同 Web 服务目录的 session bean 互不相同)。

(3)request bean。scope 取值为 request 的 bean 称为 request bean,request bean 的有效范围是用户请求的当前页面,存活时间是从用户的请求产生到请求结束。Tomcat 服务器分配给每个 JSP页面的 request bean 是互不相同的。Tomcat 服务器对请求做出响应之后,取消分配给这个 JSP 页面的 request bean。也就是说,request bean 只在当前页面有效,直到响应结束。request bean 的存活时间略长于 page bean,原因是 Tomcat 服务器认为页面执行完毕后,响应才算结束。当两个用户同时请求同一个 JSP 页面时,一个用户对自己 request bean 属性的改变,不会影响到另一个用户。

(4)application bean。scope 取值为 application 的 bean 称为 application bean,application bean的有效范围是当前 Web 服务目录下的各个页面,存活时间直到 Tomcat 服务器关闭。Tomcat服务器为访问 Web 服务目录的所有用户分配一个共享的 bean,即不同用户的 application bean 也都是相同的一个。也就是说,任何一个用户对自己 application bean 属性的改变,都会影响到其他用户。

5.2 获取和修改 bean 的属性

    使用 useBean 动作标记获得一个 bean 后,在 JAVA 程序片或表达式中 bean 就可以调用方法产生行为,在这种情况下,不要求创建 bean 的类遵守 setXxx 和 getXxx 等规则。获取或修改 bean 的属性还可以使用 JSP 动作标记 getProperty、setProperty 标记获取或修改属性xxx时,必须保证 bean 有相应的 getXxx 和 setXxx 方法,即对方法名字的明明有特殊的要求。

5.2.1 getProperty 动作标记

    使用 getProperty 动作标记可以获得 bean 的属性值,并将这个只用串的形式发送给用户的浏览器。使用 getProperty 动作标记之前,必须使用 useBean 动作标记获得相应的 bean。

    getProperty 动作标记的语法格式是:

<jsp:getProperty name = "bean 的 id" property = "bean 的属性"/>

<jsp:getProperty name = "bean 的 id" property = "bean 的属性">

</jsp:getProperty>

    其中,name 取值是 bean 的 id,用来指定要获取哪个 bean 的属性的值,property 取值是该 bean 的一个属性的名字。

5.2.2 setProperty 动作标记

    使用 setProperty 动作标记可以设置 bean 的属性值。使用这个标记之前,必须使用 useBean 标记得到一个相应的 bean。

    setProperty 动作标记可以通过两种方式设置 bean 属性值。

    (1)将 bean 属性值设置为一个表达式的值或字符序列。

<jsp:setProperty name = "bean 的 id" property = "bean 的属性"

value = “<%=expression%>”/>

<jsp:setProperty name = "bean 的 id" property = "bean 的属性" value = "字符序列"/>

value 给出的值的类型要和 bean 的属性的类型一致。

(2)通过 HTTP 表单的参数值来设置 bean 的相应属性值。

    A、用 form 表单的所有参数值设置 bean 相对应属性值的使用格式如下:

<jsp:setProperty name = "bean 的 id 的名字" property = "*"/>

    B、用 form 表单的某个参数的值设置 bean 的某个属性值的使用格式如下:

<jsp:setProperty name = "bean 的名字" property = "属性名" param = "参数名"/>

    setProperty 标记的上述用法具体指定了 bean 属性值将对应表单中哪个参数名指定的值,这种设置 bean 的属性值的方法,不要求 property 给出的 bean 属性的名字和 param 给出的参数名一致,即不要求 bean 属性的名字必须和表单中某个参数名字相同。

    当把字符序列设置为 beans 的属性值时,这个字符序列会自动被转化为 bean 的属性类型。JAVA语言将字符序列转化为其他数值类型的方法如下:

  • 转化到 int:Integer.parseInt(String s)
  • 转化到 long:Long.parseLong(String s)
  • 转化到 float:Float.parseFloat(String s)
  • 转化到 double:Double.parseDouble(String s)

5.3 bean 的辅助类

    在写一个创建 bean 的类时,除了需要用 import 语句引入 JDK 提供的类,可能还需要自己编写一些其他的类,只要将这样类的包名和 bean 类的包名一致即可(也可以和创建 bean 的类写在一个 JAVA 源文件中)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值