《JaaBean组件技术》PPT课件.ppt

上传人:za****8 文档编号:16087051 上传时间:2020-09-18 格式:PPT 页数:44 大小:354.63KB
返回 下载 相关 举报
《JaaBean组件技术》PPT课件.ppt_第1页
第1页 / 共44页
《JaaBean组件技术》PPT课件.ppt_第2页
第2页 / 共44页
《JaaBean组件技术》PPT课件.ppt_第3页
第3页 / 共44页
点击查看更多>>
资源描述
第5章 JavaBean组件技术,5.1 JavaBean简介,5.2.JavaBean属性,5.3 JavaBean的作用域,5.4 使用JavaBean计算圆的周长与面积,什么是JavaBean? 在基于JSP的Web开发中为什么要使用JavaBean? 在JSP页面中如何调用(使用)JavaBean? JavaBean的Scope属性,JSP开发模式,JSP+JavaBean开发模式,5.1 JavaBean简介,JavaBean是使用Java语言描述的软件组件模型,简单地说,它就是一个可以重复使用的Java类。 JavaBean可分为可视化组件和非可视化组件: 可视化组件包括简单的GUI元素(例如,文本框、按钮)及一些报表组件等。 非可视化组件是在实际开发中经常被使用到的并且在应用程序中起着至关重要的作用。其主要功能是用来封装业务逻辑(功能实现)、数据库操作(例如,数据处理、连接数据库)等。,在实际的开发过程中,通常会出现重复的代码或者段落,此时就会大大降低程序的可重用性并且浪费时间。使用JavaBean就可以大大简化程序的设计过程并且方便了其它程序的重复使用。,5.1.1 为什么要使用JavaBean,JavaBean在服务器端的应用具有非常强大的优势,非可视化的JavaBean可以非常好地实现控制逻辑、业务逻辑、表示层之间的分离,从而大大降低了它们之间的耦合度。非可视化的JavaBean现在多用于后台处理,这样会使系统具有一定的灵活性。,JavaBean是Java程序的一种,所使用的语法和其它类似的Java程序一致。在程序中使用JavaBean具有以下优点:,5.1.1 为什么要使用JavaBean,(1)可以实现代码的重复利用。 (2)易编写、易维护、易使用。 (3)它可以压缩在jar文件中,以更小的体积在网络中应用 (4)完全是Java语言编写,可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。,5.1.2 JavaBean的形式和要素(1),编写JavaBean就是编写一个Java的类,这个类创建的一个对象称做一个Bean。,如何创建JavaBean?,创建一个标准JavaBean的基本语法如下。 (1)定义包名称 (2)定义JavaBean类 JavaBean类定义的语法结构如下: public class 类名称 /类属性的定义 /类方法的定义。 ,特殊之处:,1、类名称与保存的文件名称必须一致,否则就会出现编译错误。同时,类必须声明为公有类,即public。 如:public class CarBean private String maker; . ,特殊之处:,2、JavaBean的构造函数,名称必须与JavaBean类的名称一致。构造函数的主要作用是用来初始化,而且构造函数无参数输入,其语法结构如下: public JavaBean类名称 /初始化 . 例如: public CarBean public CarBean() System.out.print(“初始化成功”); ,特殊之处:,3、定义JavaBean属性定义的语法结构如下: private 数据类型 属性名称; 例如:private String maker;,特殊之处:,3、设定JavaBean属性值方法的语法结构如下: public void set方法名(数据类型 参数) this.变量=参数; 例如: public void setMaker(String maker) this.maker=maker; 值得注意的是:JavaBean属性值的设定方法名称一般以set三个字母开头,后面跟上属性设定方法名称。,特殊之处:,3、获取JavaBean属性值方法的语法结构如下: public 数据类型 get方法名() return this.属性名; 例如: public String getMaker() return this.maker; ,特殊之处:,3、对于boolean类型属性,获取属性值语法结构如下: public boolean is属性名() return this.属性名; ,Javabean特殊之处:,(1)类必须声明为公有类public; (2)构造方法必须是无参的; (3)如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,即更改或获取属性,在类中可以使用两个方法: getXXX():用来获取属性xxx。 setXXX():用来修改属性xxx.。 (4)对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用is“代替上面的get。 (5)类中方法的访问属性都必须是public的。,5.1.2 JavaBean的形式和要素(2),JavaBean示例:,5.2 JavaBean属性,5.2.1 简单属性,5.2.2 索引属性,5.2.3 束缚属性,5.2.4 限制属性,在JavaBean的设计中按照其属性的不同作用可以把属性分为4类,分别是简单属性(Simple)、索引属性(Indexed)、束缚属性(Bound)、限制属性(Constrained)。,Javabean的使用,第一步编译好JavaBean类,并发布到Web应用的WEB-INFclasses文件夹下。 第二步在Servlet/JSP中导入并使用JavaBean,Javabean的使用,在JSP中使用JavaBean的方法主要有: 直接使用:直接使用就是在中直接用new生成对象,再调用其中的方法。 通过JSP动作来使用:通过JSP动作也可使用JavaBean。 标记用于从指定的作用范围中查找一个指定ID名的JavaBean对象,并将其引用到当前JSP页面中,如果找不到此对象,则重新生成一个 。 ,简单属性,JavaBean的简单属性(Simple属性)表示为一般数据类型的变量并且getXXX()和setXXX()方法是以属性来命名的。例如:,索引属性,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 getArray(int index)/返回数组中的某个值 return arrayindex; ,使用indexed属性除了表示数组之外,还可以表示集合类。,束缚属性,束缚属性(Bound)也称为关联属性,它是当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就触发一个PropertyChange事件(在Java程序中,事件也是一个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。把这种事件传递到其它的Bean,至于接收事件的Bean应做什么动作由其自己定义。包含关联属性的Bean必须具有以下的功能:,(1)允许事件监听器注册和注销与其有关的属性修改事件; (2)当修改一个关联属性时,可以在相关的监听器上触发属性修改 事件。,利用java.beans.PropertyChangeSupport类创建出PropertyChangeSupport类的对象,从而可以用于管理注册的监听器列表和属性修改事件通知的发送。JavaBean还需要实现addPropertyChangeLinster()方法和removePropertyChangeLinster()方法,以便添加和取消属性变化的监听器。,限制属性,限制属性(constrained)是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它外部Java对象可否决该属性值的改变(限制属性的监听器通过抛出PropertyVetoException来阻止该属性值的改变),Bean本身也可以否决该Bean属性值的改变。,一个限制属性有两种监听器:属性变化监听器和取消属性改变的监听器。取消属性改变的监听器在自己的对象代码中有相应的控制语句,在监听到有限制属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。,利用java.beans.VetoableChangeSupport类的fireVetoableChange()方法传递属性名称、改变前的值和改变后的值等信息。JavaBean还需要实现addVetoableChangeLinster()方法和removeVetoableChangeLinster()方法,以便添加和取消属性变化的监听器。,注意:由于限制属性使用了错误处理,编程的时候要特别注意异常的处理方式。,示例:SomeBean.java,importjava.beans.PropertyChangeListener; importjava.beans.PropertyChangeSupport; importjava.beans.PropertyVetoException; importjava.beans.VetoableChangeListener; importjava.beans.VetoableChangeSupport; publicclassSomeBean protectedPropertyChangeSupportpropertySupport;/属性改变通知 protectedVetoableChangeSupportvetoableChangeSupport;/反对属性改变 privateStringchangableValue; publicSomeBean() /使本对象有属性改变通知监听器的能力 propertySupport=newPropertyChangeSupport(this); /使监听器有反对本对象属性改变的能力 vetoableChangeSupport=newVetoableChangeSupport(this); ,示例:SomeBean.java,publicvoidsetChangableValue(StringnewValue)throwsPropertyVetoException /如果值发生了修改 if(!newValue.equals(changableValue) StringoldValue=changableValue; /一定要先调用fireVetoableChange方法,向所有已注册的监听器报告属性更新,如果监听器拒绝会抛出异常 vetoableChangeSupport.fireVetoableChange(changableValue,oldValue,newValue); /如果未拒绝,则修改Bean属性 changableValue=newValue; /后调用firePropertyChange方法,报告所有已注册的监听器的绑定属性更新 propertySupport.firePropertyChange(changableValue,oldValue,newValue); /如果两个监听器的次序调过来,你想想会有什么问题? ,示例:SomeBean.java,publicvoidaddPropertyChangeListener(PropertyChangeListenerlistener) /向监听器列表添加一个属性改变监听器 propertySupport.addPropertyChangeListener(listener); publicvoidremovePropertyChangeListener(PropertyChangeListenerlistener) propertySupport.removePropertyChangeListener(listener); publicvoidaddVetoableChangeListener(VetoableChangeListenerlistener) /向监听器列表添加一个否决改变监听器 vetoableChangeSupport.addVetoableChangeListener(listener); publicvoidremoveVetoableChangeListener(VetoableChangeListenerlistener) vetoableChangeSupport.removeVetoableChangeListener(listener); publicStringgetChangableValue() returnchangableValue; ,示例:SomeBeanPropertyListener.java,importjava.beans.PropertyChangeEvent; importjava.beans.PropertyChangeListener; importjava.beans.PropertyVetoException; importjava.beans.VetoableChangeListener; /*监听器,用来监听Bean属性值的变化与拒绝属性的修改*/ publicclassSomeBeanPropertyListenerimplementsPropertyChangeListener, VetoableChangeListener publicvoidpropertyChange(PropertyChangeEventevt) /在这里处理监听到的事件 System.out.println(+evt.getNewValue() +issettedtoreplacetheoldvalue+evt.getOldValue()+); ,示例:SomeBeanPropertyListener.java,publicvoidvetoableChange(PropertyChangeEventevt)throwsPropertyVetoException /如果设置的值为某个特殊值(这里为invalidValue),拒绝修改 if(evt.getNewValue().equals(invalidValue) System.out.println(+evt.getNewValue() +istrytoreplacetheoldvalue+evt.getOldValue()+); /抛出异常表示拒绝修改属性 thrownewPropertyVetoException( WhatyousetinvalidValueisainvalidvalue!operatefail!, evt); ,示例:TestBean.java,importjava.beans.PropertyVetoException; /*测试类*/ publicclassTestBean publicstaticvoidmain(Stringargs) SomeBeansomeBean=newSomeBean(); /添加监听器 someBean.addPropertyChangeListener(newSomeBeanPropertyListener(); someBean.addVetoableChangeListener(newSomeBeanPropertyListener(); try someBean.setChangableValue(someValue);/设置 someBean.setChangableValue(anotherValue);/修改 someBean.setChangableValue(invalidValue);/尝试修改成特殊值 catch(PropertyVetoExceptione) System.err.println(e.getMessage(); ,示例:,运行结果: someValue is setted to replace the old value null anotherValue is setted to replace the old value someValueinvalidValue is try to replace the old value anotherValue What you set invalidValue is a invalid value! operate fail!,5.3 JavaBean的作用域,5.3.1 page作用域,5.3.2 request作用域,5.3.3 session作用域,5.3.4 application作用域,5.3.5 JavaBean获取作用域数据,appliaction,session,page,request,page作用域,page作用域在这4种类型中范围是最小的,客户端每次请求访问时都会创建一个JavaBean对象。JavaBean对象的有效范围是客户请求访问的当前页面文件,当客户执行当前的页面文件完毕后JavaBean对象结束生命。 在page范围内,每次访问页面文件时都会生成新的JavaBean对象,原有的JavaBean对象已经结束生命期。,request作用域,当scope为request时,JavaBean对象被创建后,它将存在于整个request的生命周期内,request对象是一个内建对象,使用它的getParameter方法可以获取表单中的数据信息。 Request范围的JavaBean与request对象有着很大的关系,它的存取范围除了page外,还包括使用动作元素和包含的网页,所有通过这两个操作指令连接在一起的JSP程序都可以共享同一个JavaBean对象。,session作用域,当scope为session时,JavaBean对象被创建后,它将存在于整个session的生命周期内,session对象是一个内建对象,当用户使用浏览器访问某个网页时,就创建了一个代表该链接的session对象,同一个session中的文件共享这个JavaBean对象。客户对应的session生命期结束时JavaBean对象的生命也结束了。在同一个浏览器内,JavaBean对象就存在于一个session中。当重新打开新的浏览器时,就会开始一个新的session。每个session中拥有各自的JavaBean对象。,application作用域,当scope为application时,JavaBean对象被创建后,它将存在于整个主机或虚拟主机的生命周期内,application范围是JavaBean的生命周期最长的。同一个主机或虚拟主机中的所有文件共享这个JavaBean对象。如果服务器不重新启动,scope为application的JavaBean对象会一直存放在内存中,随时处理客户的请求,直到服务器关闭,它在内存中占用的资源才会被释放。在此期间,服务器并不会创建新的JavaBean组件,而是创建源对象的一个同步拷贝,任何拷贝对象发生改变都会使源对象随之改变,不过这个改变不会影响其它已经存在的拷贝对象。,JavaBean获取作用域数据 (1),通过下面的实例说明4个作用域:,首先,创建一个JavaBean:“Scope.java” 。,package scope; public class Scope public Scope() /无参的构造函数 private int number=0; /初始化变量number的值为0 public int getNmuber() /增加并返回变量number的值 number+; return number; public void setNumber(int newNumber) this.number = newNumber; /给变量number赋新值 ,JavaBean获取作用域数据 (2),然后,创建名称为“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 Circle() /无参的构造函数 public int getRadius() return radius; /返回变量radius public 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.jsp,circle.jsp,输入“50”单击“开始计算”,应用场景一 在一个网上的购物的WEB应用中,当用户在一个页面中挑选到一种商品,添加到购物车Bean中,然后在下一个商品页面中又挑选到其他的商品添加到同一个购物车Bean中,直到最后一个结帐页面需要从购物车Bean中取出商品来计算总金额。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!