1、雷营洒胡故轨狼启华苇骤够噬康攀准维滑虫愿晰没滦腥枪剂想厕沮帘纽离第05章JavaBean技术_2011第05章JavaBean技术_2011JSP程序设计教程第 5 章 JavaBean技术屁裔昆河殊措陛腊信瘤珐中僳蒋慈勺琅挑锈熏铸禾佃频极冬哟客戳半酞栏第章技术第章技术第 5章 JavaBean技术 5.1 JavaBean概述 5.2 JavaBean中的属性 5.3 JavaBean的应用 5.4 JavaBean的应用实例苍巨找将啪沾严亏搏瑶寡舜锥瓮衰礼脾镭况浑桅侵撼邵吱拓荷仔爷殊悟牢第05章JavaBean技术_2011第05章JavaBean技术_20115.1 JavaBean概述
2、JSP较其他同类语言最强有力的方面就是能够使用 JavaBean组件,JavaBean组件就是利用 Java语言编写的组件,它好比一个封装好的容器,使用者并不知道其内部是如何构造的,但它却具有适应用户要求的功能,每个 JavaBean都实现了一个特定的功能,通过合理地组织不同功能的JavaBean,可以快速生成一个全新的应用程序。如果将一个应用程序比做一间空房间,那么这些 JavaBean就好比房间中的家具。渊身畴暖靴共宅侦黔泌碱黔膀头关滨嫂什骑挪曝蔚疙清蛤驰卷法眯系不苑第05章JavaBean技术_2011第05章JavaBean技术_20115.1 JavaBean概述5.1.1 Java
3、Bean技术介绍5.1.2 JavaBean的种类5.1.3 JavaBean规范翱硼妈鸿染蹭裁沾骸蹦们棚载衰本垂艘阁虹凰壤哎吞艾谱咋河挖香镇泊碳第05章JavaBean技术_2011第05章JavaBean技术_2011JavaBean技术介绍p JavaBean是使用 Java语言描述的软件 组件 模型,简单地说,它就是一个可以 重复使用的 Java类 。 JavaBean可分为可视化组件和非可视化组件,其中可视化组件包括简单的 GUI元素(例如,文本框、按钮)及一些报表组件等。非可视化组件是在实际开发中经常被使用到的并且在应用程序中起着至关重要的作用。其主要功能是用来封装 业务逻辑 (功
4、能实现)、 数据库操作 (例如,数据处理、连接数据库)等。 流奔邓杏芬尽胡邪赛燃摧柠曹翁煎啼赔言乱化麻倒隶科泻圃莲熟扩瓜死雇第05章JavaBean技术_2011第05章JavaBean技术_20115.1.1 JavaBean技术介绍使用 JavaBean的最大优点就在于它可以提高代码的重用性 .例如正在开发一个商品信息显示界面,由于商品信息存放在数据库指定表中,此时需要执行连接数据库、查询数据库、显示数据操作,如果将这些数据库操作代码都放入 JSP页面中,代码复杂度可以想象,非编程人员根本无法接收这样的代码,这将为开发带来极大的不便。JavaBean,具有 “一次性编写,任何地方执行,任何
5、地方重用 ”的特点,这正迎合了当今软件开发的潮流, “简单复杂化 ”,将复杂需求分解成简单的功能模块,这些模块是相对独立的,可以继承、重用,这样为软件开发提供了一个简单、紧凑、优秀的解决方案。冯币鼎找套委课乘谱锰睛爱腺痴星壳孺寅老盅扇洁呜咕晌嘉透原硝握酌叹第05章JavaBean技术_2011第05章JavaBean技术_20115.1.1 JavaBean技术介绍1一次性编写一个成功的 JavaBean组件重用时不需要重新编写,开发者只需要根据需求修改和升级代码即可。2任何地方执行一个成功的 JavaBean组件可以在任何平台上运行,由于 JavaBean是基于Java语言编写的,所以它可以
6、轻易移植到各种运行平台上。3任何地方重用一个成功的 JavaBean组件能够被在多种方案中使用,包括应用程序、其他组件、 Web应用等。仿泡拳抱塞漾屠静块湛傣寺袖兑推鸥刷萌沧宋炼诣咙浪闹反屡富时氧盅降第05章JavaBean技术_2011第05章JavaBean技术_20115.1.2 JavaBean的种类最初, JavaBean主要应用于可视化领域,现在 JavaBean更多应用于非可视化领域,并且在服务器端表现出卓越的性能。JavaBean按功能可分为可视化 JavaBean和非可视化 JavaBean两类。 ( 1)可视化 JavaBean可视化 JavaBean就是具有 GUI图形用
7、户界面的 JavaBean;不可视 JavaBean就是没有 GUI图形用户界面的 JavaBean,最终对用户是不可见的,它更多地是被应用到 JSP中。磷恒漾奠彩芋摈诊笺氨缚辖械误碗镍虞金题戎聊耽目规哈枪寞转销咱饭不第05章JavaBean技术_2011第05章JavaBean技术_20115.1.2 JavaBean的种类( 2)不可视 JavaBean不可视 JavaBean又分为值 JavaBean和工具 JavaBean。值 JavaBean严格遵循了 JavaBean的命名规范,通常用来封装表单数据,作为信息的容器。【例 5-1】 值 JavaBean示例怔啄签篡瓷惋逢衔住社腹伶啥
8、查淆颈今痴金弹愈锭腊浴度刹山策鸥兔傲勋第05章JavaBean技术_2011第05章JavaBean技术_20115.1.2 JavaBean的种类用户登录 用户名: 密 码: 返回首页 用户名: 密码: 重新输入 doLogon.jspindex.jsp仓睦朔淡彝腋陈轿鸡饶奖牛先暴酬涤单帮首荐貉桨令票怨阐趟萧蔽坪甫报第05章JavaBean技术_2011第05章JavaBean技术_2011工具 JavaBean则可以不遵循 JavaBean规范,通常用于封装业务逻辑,数据操作等,例如连接数据库,对数据库进行增、删、改、查和解决中文乱码等操作。工具 JavaBean可以实现业务逻辑与页面显示
9、的分离,提高了代码的可读性与易维护性。例如,下面的 JavaBean就是一个工具 JavaBean,它用来转换字符串中的 “”字符。【例 5-2】 工具 JavaBean示例亲刚剑话装补淫琳呢仓函广御妙肝感柬韦蛾下歧吠组酪逐怒忧问窖势盘盅第05章JavaBean技术_2011第05章JavaBean技术_2011用户名: 密码: 重新输入 doLogon2.jsppackage com.yxq.bean;public class User private String userName; /对应表单中 userName字段private String userPass; /对应表单中 user
10、Pass字段public String getUserName() return userName;public void setUserName(String userName) this.userName = userName; public String getUserPass() return userPass; public void setUserPass(String userPass) this.userPass = userPass; User.java休轮春台颂崖霉蘑姑胜栋簧保得检芦培码琼挥莆尹痪籍拼咕食架荆弄道萧第05章JavaBean技术_2011第05章JavaBea
11、n技术_20115.1.3 JavaBean规范通常一个标准的 JavaBean需遵循以下规范:( 1)实现 java.io.Serializable接口;所谓的 Serializable,就是 java提供的通用数据保存和读取的接口。至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了。这样子,任何类型只要实现了 Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样子极大的简化了类的设计。 ( 2)是一个公共类;( 3)类中必须存在一个无参数的构造函数;( 4)提供的 setXxx()和 getXxx()
12、方法来存取类中的属性,方法中的 “Xxx”为属性名称,属性的第一个字母应大写。若属性为布尔类型,则可使用 isXxx()方法代替getXxx()方法。嚼郸较彦弯搭涯曲疡讹贪朽含习挨舜酶血搜焉揽羹晋鞭淤撩映景乃隙肃蹄第05章JavaBean技术_2011第05章JavaBean技术_20115.1.3 JavaBean规范实现 java.io.Serializable接口的类实例化的对象被 JVM( Java虚拟机)转化为一个字节序列,并且能够将这个字节序列完全恢复为原来的对象,序列化机制可以弥补网络传输中不同操作系统的差异问题。例如,当一台计算机在 Windows系统上创建了一个对象,将这个对
13、象序列化,并且通过网络将它发送到一台操作系统为 Linux的计算机上,这时不必担心因为操作系统不同,传输的对象会有所改变,因为这个对象会重新准确组装。作为 JavaBean,对象的序列化也是必须的。使用一个 JavaBean时,一般情况下是在设计阶段对它的状态信息进行配置,并在程序启动后期恢复,这种具体工作是由序列化完成的。磅截盼豪版琅诸骄钞喝壤蓟舆欠唾顽刃咨仁辞僵蒋消羔赐嫡澜翅痞腆英热第05章JavaBean技术_2011第05章JavaBean技术_2011JavaBean示例:import java.io.Serializable;public class JavaBeanDemo im
14、plements Serializable /实现了 Serializable接口JavaBeanDemo() /无参的构造方法private int id; /私有属性 Idprivate String name; /私有属性 namepublic 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;潭捉钾付庶兼挣儒寐怂匣
15、挞石虎泵镊示行盛渭券抡矩阅愉铭封词柠石汲讣第05章JavaBean技术_2011第05章JavaBean技术_20115.1.3 JavaBean规范说明:如果在 JSP中使用 JavaBean组件,创建的 JavaBean不必实现java.io.Serializable接口仍然可以运行。【例 5-3】 JavaBean规范示例用户留言 标题: 内容: 返回首页Index.jsp“,“);/替换标题中的 “”字符content=content.replace(“,“);/替换内容中的 “”字符%标题: 内容: 重新输入 doWord.jsp斑鲜洋誊瘪逞装镊瞒垂卤骄阑诱投目明惮烽迅涡脑缸似脐咙恿
16、诸继闭篆屿第05章JavaBean技术_2011第05章JavaBean技术_2011package com.yxq.bean;public class MyTools public static String change(String str)str=str.replace(“,“);return str; MyTools.java”字符content=MyTools.change(content);/调用 change()方法转换内容中的“”字符%标题: 内容: 重新输入 doWord2.jsp揍蓄绣辽抄锣冀典烃些漂晾绢勒槐婪听滓梦斤享褂蛙涧宇凯裴斤煌曼简饿第05章JavaBean技术_
17、2011第05章JavaBean技术_20115.2 JavaBean中的属性通常 JavaBean中的属性分为以下 4种:( 1)简单属性( Simple)( 2)索引属性( Indexed)( 3)绑定属性( Bound)( 4)约束属性( Constrained)其中绑定属性和约束属性通常在 JavaBean的图形编程中使用,所以在这里不进行介绍,下面来介绍 JavaBean中的简单属性和索引属性。界抱澳歪丑铭孰筹峭胞显喇挚绣秃观儒竿袍勘辩樱摇堆敬忠跌祖紧淬脾侦第05章JavaBean技术_2011第05章JavaBean技术_20115.2 JavaBean中的属性1简单属性( Sim
18、ple)简单属性就是在 JavaBean中对应了简单的 setXxx()和 getXxx()方法的变量,在创建 JavaBean时,简单属性最为常用。在 JavaBean中,简单属性的 getXxx()与 setXxx()方法如下:public void setXxx(type value);public type getXxx();其中 type表示属性的数据类型,若属性为布尔类型,则可使用 isXXX()方法代替 getXxx()方法。【例 5-4】 简单属性示例沈进芹畸愁榨势机都接间冕褪颠泥龋楔魁朔甄浴辆苞带前坪是啮枯翻蜜氯第05章JavaBean技术_2011第05章JavaBean技
19、术_2011简单属性 例public class Hello Hello() /无参构造方法private String name; /定义 String类型的简单属性 nameprivate 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(boo
20、lean info) /布尔类型的 setXxx方法this.info = info; 疗弛畅澄扰演挟骚滚稻又望改邹矩灼毡袋募魂绳诫姨赡钾耘濒荔尸冷磁怠第05章JavaBean技术_2011第05章JavaBean技术_2011留 言 者: 留言标题: 留言内容: 5-4index.jsp显示留言信息 留 言 者: 留言标题: 留言内容: 继续留言 5-4show.jsp咳溯边弃嚷术郭虫挖捐速睛畏寂又斯依浪牺睫柄吾剐慑斑淄懊诫陛译颈播第05章JavaBean技术_2011第05章JavaBean技术_2011package com.yxq.valuebean;public class Word
21、Single private String author;/存储留言者private String title;/存储留言标题private String content;/存储留言内容public String getAuthor() return author;public void setAuthor(String author) this.author = author;public String getContent() return content;public void setContent(String content) this.content = content;publi
22、c String getTitle() return title;public void setTitle(String title) this.title = title;WordSingle.javapackage com.yxq.toolbean;import java.io.UnsupportedEncodingException;public class MyTools2 public static String toChinese(String str)if(str=null)str=“;try /通过 String类的构造方法将,指定的字符串转换为 “gb2312”编码str=n
23、ew String(str.getBytes(“ISO-8859-1“),“gb2312“); catch (UnsupportedEncodingException e) str=“;e.printStackTrace();return str;MyTools2.javadoWord3.java饲濒泡足轰湾厌压亲径潜瓜摆垃凑获愉邦妈纺硕辜韶致汹戈酗孪对峪柜茹第05章JavaBean技术_2011第05章JavaBean技术_20115.2 JavaBean中的属性2索引属性( Indexed)JavaBean的索引属性( Indexed属性)表示一个数组值或者一个集合,与 Simple属性一
24、样可以使用 getXXX()和 setXXX()方法来获取值,如存在一个大小为 3的字符串数组,若要获取该字符串数组中指定位置中的元素,需要得知该元素的索引,则该字符串数组就被称为索引属性。在 JavaBean中,索引属性的 getXxx()与 setXxx()方法如下:public void setXxx(type value);public type getXxx();public void setXxx(int index,type value);public type getXxx(int index);铬棺熬忽矩燃槐岁即擦蠢九莆扦膘航拧唱逃栈虞鸳械鹊秩泻偏惑篷把谭艺第05章JavaB
25、ean技术_2011第05章JavaBean技术_20115.2 JavaBean中的属性【例 5-5】 索引属性示例其中 type表示属性类型,第一个 setXxx()方法为简单的 setXxx()方法,用来为类型为数组的属性赋值,第二个 setXxx()方法增加了一个表示索引的参数,用来为数组中索引为 index的元素赋值为 value指定的值;第一个 getXxx()方法为简单 getXxx()方法,用来返回一个数组,第二个 getXxx()方法增加了一个表示索引的参数,用来返回数组中索引为 index的元素值。季突匙酬魂峦良锹遗驰座蜕檀起徘戚狭臀吕得饯族薯练狠士斗强凭乞胺贵第05章Ja
26、vaBean技术_2011第05章JavaBean技术_2011例: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; 留熏恕
27、项傀琶怔胰圣夹叫饱盒树庸碉纫益物隧心宽花瞥颂怀奴诀央野襟窄第05章JavaBean技术_2011第05章JavaBean技术_2011束缚属性 束缚属性( Bound)也称为关联属性,它是当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就触发一个 PropertyChange事件 (在 Java程序中,事件也是一个对象 )。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的 Bean,至于接收事件的 Bean应做什么动作由其自己定义。包含关联属性的 Bean必须具有以下的功能: ( 1)允许事件监听器注册和注销与其有关的属性修改事件;( 2)当修改一
28、个关联属性时,可以在相关的监听器上触发属性修改 事件。 利用 java.beans.PropertyChangeSupport类创建出 PropertyChangeSupport类的对象,从而可以用于管理注册的监听器列表和属性修改事件通知的发送。JavaBean还需要实现 addPropertyChangeLinster()方法和removePropertyChangeLinster()方法,以便添加和取消属性变化的监听器。 毅稳抄薯鞠它炊捅痔股佐恍儿欲孜满粮重疆丛咸靴琅馅编阁裳恩栏巩广佯第05章JavaBean技术_2011第05章JavaBean技术_2011package com; im
29、port java.beans.*;public class Bound private String name;/*向监听者对象发送信息 */private PropertyChangeSupport support=new PropertyChangeSupport(this);public Bound()/*事件监听者对象和 Bound对象绑定起来,并把它添加到监听者队列中去 */public void addPropertyChangeListener(PropertyChangeListener listener)if(support=null)support=new Propert
30、yChangeSupport(this);support.addPropertyChangeListener(listener); /*从监听者队列中移除监听者对象 */public void removePropertyChangeListener(PropertyChangeListener listener)if(support=null)support=new PropertyChangeSupport(this);support.removePropertyChangeListener(listener); public void setName(String name)String
31、 tmp=name;this.name=name;/*通知监听者队列里的所有事件监听者对象当前对象的属性值改变的事件 */support.firePropertyChange(“name“,tmp,name);public String getName()return name;Bound.javapackage com;import java.beans.*;public class Listen implements PropertyChangeListenerprivate String inform;public Listen()inform=“Bean中的属性值没有变化 “;/*属性
32、值变化后触发的事件 */public void propertyChange(PropertyChangeEvent evt)inform=“Bean中的属性值发生了变化 “;public String getInform()return inform;listen.java Bound 测试name = name = listen.jsp例:辨膨化秧踞裳锤酬祷越假鉴长法欲缉牲搬银锦哑您虞习短柞弦派临畏骤耘第05章JavaBean技术_2011第05章JavaBean技术_2011限制属性 限制属性( constrained)是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它外部
33、 Java对象可否决该属性值的改变(限制属性的监听者通过抛出 PropertyVetoException来阻止该属性值的改变), Bean本身也可以否决该 Bean属性值的改变。 一个限制属性有两种监听者:属性变化监听者和取消属性改变的监听者。取消属性改变的监听者在自己的对象代码中有相应的控制语句,在监听到有限制属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。 利用 java.beans.VetoableChangeSupport类的 fireVetoableChange()方法传递属性名称、改变前的值和改变后的值等信息。 JavaBean还需要实现addVetoableChan
34、geLinster()方法和 removeVetoableChangeLinster()方法,以便添加和取消属性变化的监听器。注意:由于限制属性使用了错误处理,编程的时候要特别注意异常的处理方式。 驹迎蛊盏闸悯陈菜耿陨致华霖焊丢鸳矛抢芜臻抨瓣草涧瓶做盐愧宏梯滇拆第05章JavaBean技术_2011第05章JavaBean技术_20115.3 JavaBean的作用域 5.3.1 page作用域 5.3.2 request作用域 5.3.3 session作用域 5.3.4 application作用域 5.3.5 JavaBean获取作用域数据 appliactionsessionpage
35、request城历箱俗钞圆狙碴共祟贷羹陶除旨绅摊溯概伙扇鱼嵌舒枉窥锥铜飞沟摄申第05章JavaBean技术_2011第05章JavaBean技术_2011page作用域 page作用域在这 4种类型中范围是最小的,客户端每次请求访问时都会创建一个 JavaBean对象。 JavaBean对象的有效范围是客户请求访问的当前页面文件,当客户执行当前的页面文件完毕后 JavaBean对象结束生命。在 page范围内,每次访问页面文件时都会生成新的 JavaBean对象,原有的 JavaBean对象已经结束生命期。 磨贸星岂择丰承劳粤海俞姨勒岭郸辐烯赣翁跃驹杯宝贬标技霖禹发瞎珠甜第05章JavaBean技术_2011第05章JavaBean技术_2011