《JavaBean组件技术 (2).ppt》由会员分享,可在线阅读,更多相关《JavaBean组件技术 (2).ppt(42页珍藏版)》请在三一办公上搜索。
1、第5章 JavaBean组件技术,5.1 JavaBean简介,5.2.JavaBean属性,5.3 JavaBean的作用域,5.4 使用JavaBean计算圆的周长与面积,5.1 JavaBean简介,JavaBean是使用Java语言描述的软件组件模型,简单地说,它就是一个可以重复使用的Java类。JavaBean可分为可视化组件和非可视化组件,其中可视化组件包括简单的GUI元素(例如,文本框、按钮)及一些报表组件等。非可视化组件是在实际开发中经常被使用到的并且在应用程序中起着至关重要的作用。其主要功能是用来封装业务逻辑(功能实现)、数据库操作(例如,数据处理、连接数据库)等。,返回,5
2、.1.1 为什么要使用JavaBean,5.1.2 JavaBean的形式和要素,JavaBean是Java程序的一种,所使用的语法和其它类似的Java程序一致。在程序中使用JavaBean具有以下优点:,为什么要使用JavaBean,(1)可以实现代码的重复利用。(2)易编写、易维护、易使用。(3)它可以压缩在jar文件中,以更小的体积在网络中应用。(4)完全是Java语言编写,可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。,返回,编写JavaBean就是编写一个Java的类,这个类创建的一个对象称做一个Bean。为了能让使用这个bean的应用程序构建工具(比如JSP引擎
3、)知道这个bean的属性和方法,只需在类的方法命名上遵守以下规则:(1)如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,即更改或获取属性,在类中可以使用两个方法:getXXX():用来获取属性xxx。setXXX():用来修改属性xxx.。,JavaBean的形式和要素(1),JavaBean的形式和要素(1),(2)对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用is代替上面的get和set。(3)类中方法的访问属性都必须是public的。(4)类中如果有构造方法,那么这个构造方法也是public的并且没有参数。,JavaBean的形式和要素(2),JavaB
4、ean示例:,import java.io.Serializable;public class JavaBeanDemo implements SerializableJavaBeanDemo()/无参的构造方法 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(St
5、ring name)this.name=name;,返回,5.2 JavaBean属性,5.2.1 简单属性,5.2.2 索引属性,5.2.3 束缚属性,5.2.4 限制属性,在JavaBean的设计中按照其属性的不同作用可以把该Bean分为4类,分别是简单属性设置(Simple)、索引属性设置(Indexed)、束缚属性设置(Bound)、限制属性设置(Constrained)。,返回,简单属性,JavaBean的简单属性(Simple属性)表示为一般数据类型的变量并且getXXX()和setXXX()方法是以属性来命名的。属性名与和该属性相关的get/set 方法名对应。例如:,返回,索引
6、属性,JavaBean的索引属性(Indexed属性)表示一个数组值或者一个集合,与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 getA
7、rray(int index)/返回数组中的某个值return arrayindex;,使用Indexed属性除了表示数组之外,还可以表示集合类。,束缚属性,束缚属性(Bound)也称为关联属性,它是当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就触发一个PropertyChange事件(在Java程序中,事件也是一个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的Bean,至于接收事件的Bean应做什么动作由其自己定义。包含关联属性的Bean必须具有以下的功能:,返回,(1)允许事件监听器注册和注销与其有关的属性修改事件;(2)当修改一
8、个关联属性时,可以在相关的监听器上触发属性修改事件。,束缚属性,束缚属性,利用类创建出PropertyChangeSupport类的对象,从而可以用于管理注册的监听器列表和属性修改事件通知的发送。JavaBean还需要实现addPropertyChangeLinster()方法和removePropertyChangeLinster()方法,以便添加和取消属性变化的监听器。,返回,关联属性Bean的实现:1、产生变化的源需要增加 PropertyChangeSupport 的实例,传入 this 作为参数。2、在属性变化处进行点火。3、增加 addListener(),removeListen
9、er()的方法,Listener 类操作的要点:1、继承 PropertyChangeListener 接口,实现 void propertyChange(PropertyChangeEvent e)方法。2、创建Bean 实例。因为要监听 source,所以 source 类的实例必须在 Listener 类中定义。3、调用 Bean 实例方法 addPropertyChangeListener(this),将 Listener 类加入成为监听者。,限制属性,限制属性(constrained)是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它外部Java对象可否决该属性值的改变
10、(限制属性的监听者通过抛出PropertyVetoException来阻止该属性值的改变),Bean本身也可以否决该Bean属性值的改变。,一个限制属性有两种监听者:属性变化监听者和取消属性改变的监听者。取消属性改变的监听者在自己的对象代码中有相应的控制语句,在监听到有限制属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。,返回,限制属性,利用类的fireVetoableChange()方法传递属性名称、改变前的值和改变后的值等信息。JavaBean还需要实现addVetoableChangeLinster()方法和removeVetoableChangeLinster()方法,以
11、便添加和取消属性变化的监听器。,注意:由于限制属性使用了错误处理,编程的时候要特别注意异常的处理方式。,返回,5.3 JavaBean的作用域,返回,5.3.1 page作用域,5.3.2 request作用域,5.3.3 session作用域,5.3.4 application作用域,appliaction,session,page,request,page作用域,page作用域在这4种类型中范围是最小的,客户端每次请求访问时都会创建一个JavaBean对象。JavaBean对象的有效范围是客户请求访问的当前页面文件,当客户执行当前的页面文件完毕后,该JavaBean将会被进行垃圾回收。在p
12、age范围内,每次访问页面文件时都会生成新的JavaBean对象,原有的JavaBean对象已经结束生命期。,返回,request作用域,当scope为request时,JavaBean对象被创建后,它将在相邻的两个页面中有效。使用动作元素或相互联系的两个页面都可以共享同一个JavaBean对象。,返回,session作用域,返回,当scope为session时,JavaBean对象被创建后,它将存在于整个session的生命周期内。当用户使用浏览器访问某个网页时,就创建了一个代表该连接的session对象,同一个session中的文件共享这个JavaBean对象。每个session中拥有各自
13、的JavaBean对象。,application作用域,返回,当scope为application时,JavaBean对象被创建后,它将存在于整个主机的生命周期内,application范围是JavaBean的生命周期最长的。同一个主机中的所有文件共享这个JavaBean对象。如果服务器不重新启动,scope为application的JavaBean对象会一直存放在内存中,随时处理客户的请求,直到服务器关闭,它在内存中占用的资源才会被释放。,JavaBean获取作用域数据(1),通过下面的实例说明4个作用域:,首先,创建一个JavaBean:“Scope.java”。,package scop
14、e;public class Scope public Scope()/无参的构造函数private int number=0;/初始化变量number的值为0public int getNumber()/增加并返回变量number的值number+;return number;public void setNumber(int newNumber)this.number=newNumber;/给变量number赋新值,JavaBean获取作用域数据(2),然后,创建名称为“scope.jsp”的页面文件,用来显示JavaBean存在的范围的具体区别。主要代码:,JavaBean获取作用域数据
15、(3),程序运行结果如图1所示:,关闭该浏览器,重新打开新的浏览器后的结果如图2所示:,图1,图2,返回,5.4 使用JavaBean计算圆的周长与面积(1),(1)创建名称为“Circle.java”的JavaBean,该类文件主要实现了圆的数学计算操作,代码如下:,package circle;public class Circle private int radius=1;/定义私有变量radius表示圆的半径public Circle()/无参的构造函数public int getRadius()return radius;/返回变量radiuspublic void setRadiu
16、s(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)创建名称为“cir
17、cle.jsp”的页面文件,该页面文件将实现显示圆的面积和周长的计算结果,主要代码如下:,5.4 使用JavaBean计算圆的周长与面积(4),(4)运行程序:,radiusInput.jsp,circle.jsp,输入“50”单击“开始计算”,返回,第三章 JSP动作元素,3.5.4 设置JavaBean属性值:,3.5.5 获取JavaBean属性值:,3.5.3 声明使用JavaBean:,在JSP中专门提供了3个页面指令来和JavaBean交互,分别是jsp:useBean指令、jsp:setProperty指令和jsp:getProperty指令。,声明使用JavaBean:,jsp
18、:useBean指令指定JSP页面包括的JavaBean,具体的语法格式为:,其中,id是当前页面中引用JavaBean的名字,JSP页面中的Java代码将使用这个名字来访问JavaBean。,设置JavaBean属性值:(1),该元素设置JavaBean的属性。使用格式如下:,元素的属性,property=“*”:该属性说明request请求中的所有参数值将被一一赋给JavaBean中与参数具有相同名字的属性。,property=“属性名称”:该属性取值为JavaBean中的属性时,则只会将request请求中与该JavaBean属性同名的一个参数的致赋给这个JavaBean属性。,prop
19、erty=“属性名称”param=“参数名称”:param属性指定一个request请求中的参数,property属性指定JavaBean中的某个属性。该方法允许将请求中的参数赋值给JavaBean中与该参数不同名的属性。,返回,获取JavaBean属性值:,该属性用来从指定的JavaBean中获取指定的属性值,并输出到页面中。该JavaBean必须具有getXXX()方法。元素的使用格式如下:,返回,JavaBean属性值的设置于获取举例:,goods.jsp,Goods.java,http:/localhost:8080/charp5/goods.jsp运行结果:,(1),(2),(3),实例:显示图片(play.jsp),Play.java,Play.java,运行结果:,