《JavaBean经典教程》由会员分享,可在线阅读,更多相关《JavaBean经典教程(22页珍藏版)》请在金锄头文库上搜索。
1、第第5章章 JavaBean组件技术组件技术 5.1 JavaBean简介 5.2.JavaBean属性 5.3 JavaBean的作用域 5.4 使用JavaBean计算圆的周长与面积 5.1 JavaBean简介简介 5.1.1 为什么要使用JavaBean 5.1.2 JavaBean的形式和要素 JavaBean是使用Java语言描述的软件组件模型,简单地说,它就是一个可以重复使用的Java类。JavaBean可分为可视化组件和非可视化组件,其中可视化组件包括简单的GUI元素(例如,文本框、按钮)及一些报表组件等。非可视化组件是在实际开发中经常被使用到的并且在应用程序中起着至关重要的作
2、用。其主要功能是用来封装业务逻辑(功能实现)、数据库操作(例如,数据处理、连接数据库)等。 返回 JavaBean是Java程序的一种,所使用的语法和其它类似的Java程序一致。在程序中使用JavaBean具有以下优点: 在实际的开发过程中,通常会出现重复的代码或者段落,此时就会大大降低程序的可重用性并且浪费时间。使用JavaBean就可以大大简化程序的设计过程并且方便了其它程序的重复使用。 为什么要使用为什么要使用JavaBean JavaBean在服务器端的应用具有非常强大的优势,非可视化的JavaBean可以非常好地实现控制逻辑、业务逻辑、表示层之间的分离,从而大大降低了它们之间的耦合度
3、。非可视化的JavaBean现在多用于后台处理,这样会使系统具有一定的灵活性。 (1)可以实现代码的重复利用。(2)易编写、易维护、易使用。(3)它可以压缩在jar文件中,以更小的体积在网络中应用 (4)完全是Java语言编写,可以在任何安装了Java运行环境的平台上的使 用,而不需要重新编译。 返回 编写JavaBean就是编写一个Java的类,这个类创建的一个对象称做一个Bean。为了能让使用这个bean的应用程序构建工具(比如JSP引擎)知道这个bean的属性和方法,只需在类的方法命名上遵守以下规则: JavaBean的形式和要素(的形式和要素(1) (1)如果类的成员变量的名字是xxx
4、,那么为了更改或获取成员变量的值, 即更改或获取属性,在类中可以使用两个方法: getXXX():用来获取属性xxx。 setXXX():用来修改属性xxx.。(2)对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用is“ 代替上面的get和set。(3)类中方法的访问属性都必须是public的。(4)类中如果有构造方法,那么这个构造方法也是public的并且没有参数。 JavaBean的形式和要素(的形式和要素(2) JavaBean示例:import java.io.Serializable;public class JavaBeanDemo implements Seria
5、lizable /实现了Serializable接口 JavaBeanDemo() /无参的构造方法 private int id; /私有属性Id private String name; /私有属性name public int getId() return Id; public void setId(int id) /set()方法 this.id = id; public String getName() /get()方法 return name; public void setName(String name) this.name = name; 返回5.2 JavaBean属性属性
6、 5.2.1 简单属性 5.2.2 索引属性 5.2.3 束缚属性 5.2.4 限制属性 在JavaBean的设计中按照其属性的不同作用可以把该Bean分为4类,分别是简单属性设置(Simple)、索引属性设置(Indexed)、束缚属性设置(Bound)、限制属性设置(Constrained)。 返回简单属性简单属性 JavaBean的简单属性(Simple属性)表示为一般数据类型的变量并且getXXX()和setXXX()方法是以属性来命名的。例如: public class Hello Hello()/无参构造方法private String name;/定义String类型的简单属性n
7、ameprivate boolean info;public String getName() /简单属性的getXxx()方法return name;public void setName(String name) /简单属性的setXxx()方法this.name = name;public boolean isInfo() /布尔类型的取值方法return info;public void setInfo(boolean info) /布尔类型的setXxx方法this.info = info; 返回索引属性索引属性 JavaBean的索引属性(Indexed属性)表示一个数组值或者一个
8、集合,与Simple属性一样可以使用getXXX()和setXXX()方法来获取值,例如:public int array=new int8;public int getArray() /返回整个数组return array;public void setArray(int array) /为整个数组赋值this.array = array;public void setArray(int index,int value) /为数组中的某个元素赋值this.arrayindex=value;public int getArray(int index)/返回数组中的某个值return array
9、index; 使用Indexed属性除了表示数组之外,还可以表示集合类。 返回束缚属性束缚属性 束缚属性(Bound)也称为关联属性,它是当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就触发一个PropertyChange事件(在Java程序中,事件也是一个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的Bean,至于接收事件的Bean应做什么动作由其自己定义。包含关联属性的Bean必须具有以下的功能: (1)允许事件监听器注册和注销与其有关的属性修改事件;(2)当修改一个关联属性时,可以在相关的监听器上触发属性修改 事件。 利用java
10、.beans.PropertyChangeSupport类创建出PropertyChangeSupport类的对象,从而可以用于管理注册的监听器列表和属性修改事件通知的发送。JavaBean还需要实现addPropertyChangeLinster()方法和removePropertyChangeLinster()方法,以便添加和取消属性变化的监听器。 返回限制属性限制属性 限制属性(constrained)是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它外部Java对象可否决该属性值的改变(限制属性的监听者通过抛出PropertyVetoException来阻止该属性值的改变
11、),Bean本身也可以否决该Bean属性值的改变。 一个限制属性有两种监听者:属性变化监听者和取消属性改变的监听者。取消属性改变的监听者在自己的对象代码中有相应的控制语句,在监听到有限制属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。 利用java.beans.VetoableChangeSupport类的fireVetoableChange()方法传递属性名称、改变前的值和改变后的值等信息。JavaBean还需要实现addVetoableChangeLinster()方法和removeVetoableChangeLinster()方法,以便添加和取消属性变化的监听器。注意:由于
12、限制属性使用了错误处理,编程的时候要特别注意 异常的处理方式。 返回5.3 JavaBean的作用域的作用域 返回5.3.1 page作用域 5.3.2 request作用域 5.3.3 session作用域 5.3.4 application作用域 5.3.5 JavaBean获取作用域数据 appliactionsessionpagerequestpage作用域作用域 page作用域在这4种类型中范围是最小的,客户端每次请求访问时都会创建一个JavaBean对象。JavaBean对象的有效范围是客户请求访问的当前页面文件,当客户执行当前的页面文件完毕后JavaBean对象结束生命。 在pa
13、ge范围内,每次访问页面文件时都会生成新的JavaBean对象,原有的JavaBean对象已经结束生命期。 返回request作用域作用域 当scope为request时,JavaBean对象被创建后,它将存在于整个request的生命周期内,request对象是一个内建对象,使用它的getParameter方法可以获取表单中的数据信息。 Request范围的JavaBean与request对象有着很大的关系,它的存取范围除了page外,还包括使用动作元素和包含的网页,所有通过这两个操作指令连接在一起的JSP程序都可以共享同一个JavaBean对象。 返回session作用域作用域 返回 当s
14、cope为session时,JavaBean对象被创建后,它将存在于整个session的生命周期内,session对象是一个内建对象,当用户使用浏览器访问某个网页时,就创建了一个代表该链接的session对象,同一个session中的文件共享这个JavaBean对象。客户对应的session生命期结束时JavaBean对象的生命也结束了。在同一个浏览器内,JavaBean对象就存在于一个session中。当重新打开新的浏览器时,就会开始一个新的session。每个session中拥有各自的JavaBean对象。 application作用域作用域 返回 当scope为application时,
15、JavaBean对象被创建后,它将存在于整个主机或虚拟主机的生命周期内,application范围是JavaBean的生命周期最长的。同一个主机或虚拟主机中的所有文件共享这个JavaBean对象。如果服务器不重新启动,scope为application的JavaBean对象会一直存放在内存中,随时处理客户的请求,直到服务器关闭,它在内存中占用的资源才会被释放。在此期间,服务器并不会创建新的JavaBean组件,而是创建源对象的一个同步拷贝,任何拷贝对象发生改变都会使源对象随之改变,不过这个改变不会影响其它已经存在的拷贝对象。 JavaBean获取作用域数据获取作用域数据 (1)通过下面的实例说
16、明4个作用域:首先,创建一个JavaBean:“Scope.java” 。package scope;public class Scope public Scope() /无参的构造函数private int number=0; /初始化变量number的值为0public int getNmuber() /增加并返回变量number的值number+;return number; public void setNumber(int newNumber) this.number = newNumber; /给变量number赋新值 JavaBean获取作用域数据获取作用域数据 (2) 然后,创
17、建名称为“scope.jsp”的页面文件,用来显示JavaBean存在的范围的具体区别。主要代码: JavaBean获取作用域数据获取作用域数据 (3)程序运行结果如图1所示: 关闭该浏览器,重新打开新的浏览器后的结果如图2所示: 图1图2返回5.4 使用使用JavaBean计算圆的周计算圆的周长与面积长与面积 (1)(1)创建名称为“Circle.java”的JavaBean,该类文件主要实现了圆的数学计算操作,代码如下: package circle;public class Circle private int radius=1; /定义私有变量radius表示圆的半径public Ci
18、rcle() /无参的构造函数public int getRadius()return radius; /返回变量radiuspublic void setRadius(int rRadius)radius=rRadius; /给变量radius赋值public double circleLength()return Math.PI*radius*2.0;/计算圆的周长public double circleArea()return Math.PI*radius*radius;/计算圆的面积 5.4 使用使用JavaBean计算圆的周计算圆的周长与面积长与面积 (2)(2)创建名称为“radiusInput.jsp”的页面文件,该页面文件将实现提示用户输入圆半径的功能,主要代码如下: 请输入圆的半径: 5.4 使用使用JavaBean计算圆的周计算圆的周长与面积长与面积 (3)(3)创建名称为“circle.jsp”的页面文件,该页面文件将实现显示圆的面积和周长的计算结果,主要代码如下: 5.4 使用使用JavaBean计算圆的周计算圆的周长与面积长与面积 (4)(4)运行程序: radiusInput.jspcircle.jsp输入“50”单击“开始计算”返回