内蒙古科技大学 教案 第四章JavaBean 本章学习重要目标 理论 多末好的量道学会位用装使”以及 一、组件是一个可以自行进行内部管理的一个或几个类组成的群体,除了自己提供的 外部操作界面以外,内部信息和运行方式外部都不知道,只能通过接口操作 二、组件模型可使软件便于修改和测试,每一软件包含一组属性、操作和时间处理, 若干组件就可以生成设计者所需要的特定程序。 三、常见组件:Microsoft公司的COM组件模型、VB可视组件:Sum公司的Javabean 组件横型。 四、JavaBean是一个可重复使用的软件组件。实际上JavaBean是一种Jaa类,通过封 装属性和方法成为具有某种功能或者处理某个业务的对象.简称bea。 五、由于JavaBean是基于Java语言的.因此JavaBean不依赖平台。 六、javabean特点: ■(一)可以实现代码的重复利用」 ■一易编写易维护 易使用 (三)可以在任何安装了Java运行环境的平台上使用。而不需要重新编译。 ■(四)JSP页面应当将数据的处理过程指派给一个或几个beam来完成.我们只需 在JSP页面中调用这个bean即可。 ■(五)不提倡大量的数据处理都用Java程序片来完成。在JSP页面中调用bean 可有效地分离静态工作部分和动态工作部分。 §4.1编写JavaBean和使用JavaBean 一、编写bean (一)bean分为可视组件和非可视组件。在JSP中主要使用非可视组件。对于非可视 化组件,不必去设计它的外观,主要关心它的属性和方法。 (仁)编写JavaBcan就是编写一个Java的类,这个类创建的一个对象称做一个bcan。 (三)类的方法命名上遵守以下规则 1.如果类的成员变量的名字是Xx ,那么为了更改或获取成员变量的值,即更 改或获取属性。在类中可以使用两个方法: (I)get),用来获取属性ox。 (2)setxxx(0.用来修改属性xx。 2.对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用is代替上面 的8t和 3.类中方法的访问属性都必须是public的。 4.类中如果有构造方法.那么这个构造方法也是public的并且是无参数的 5.构造方法:初始化一个对象的最终步骤是去调用这个对象的构造方法。构造方法 负责对象的初始化工作,为实例变量赋予合适的初始值。构造方法必须满足以 下语法规则: 第1页
内 蒙 古 科 技 大 学 教 案 第 1 页 第四章 JavaBean 本章学习重要目标: 1.理论:JavaBean 的原理和各种内部特性。 2.技能:学会使用 JavaBean 来封装一些功能操作,使程序结构优化。 3.要求:了解 JavaBean 的工作原理,学会使用和配置 JavaBean 程序,以及 JavaBean 和 JSP 相结合编程的策略。 一、组件是一个可以自行进行内部管理的一个或几个类组成的群体,除了自己提供的 外部操作界面以外,内部信息和运行方式外部都不知道,只能通过接口操作。 二、组件模型可使软件便于修改和测试,每一软件包含一组属性、操作和时间处理, 若干组件就可以生成设计者所需要的特定程序。 三、常见组件:Microsoft 公司的 COM 组件模型、VB 可视组件;Sun 公司的 Javabean 组件模型。 四、JavaBean 是一个可重复使用的软件组件。实际上 JavaBean 是一种 Java 类,通过封 装属性和方法成为具有某种功能或者处理某个业务的对象.简称 bean。 五、由于 JavaBean 是基于 Java 语言的.因此 JavaBean 不依赖平台。 六、javabean 特点: ◼ (一) 可以实现代码的重复利用。 ◼ (二)易编写、易维护、易使用。 ◼ (三)可以在任何安装了 Java 运行环境的平台上使用.而不需要重新编译。 ◼ (四)JSP 页面应当将数据的处理过程指派给一个或几个 bean 来完成.我们只需 在 JSP 页面中调用这个 bean 即可。 ◼ (五)不提倡大量的数据处理都用 Java 程序片来完成。在 JSP 页面中调用 bean, 可有效地分离静态工作部分和动态工作部分。 §4.1 编写 JavaBean 和使用 JavaBean 一、编写 bean (一) bean 分为可视组件和非可视组件。在 JSP 中主要使用非可视组件。对于非可视 化组件,不必去设计它的外观,主要关心它的属性和方法。 (二)编写 JavaBean 就是编写一个 Java 的类,这个类创建的一个对象称做一个 bean。 (三) 类的方法命名上遵守以下规则 1.如果类的成员变量的名字是 XXX,那么为了更改或获取成员变量的值,即更 改或获取属性.在类中可以使用两个方法: (1)getxxx(),用来获取属性 xxx。 (2)setxxx().用来修改属性 xxx。 2. 对于 boolean 类型的成员变量,即布尔逻辑类型的属性,允许使用 is 代替上面 的 get 和 set。 3.类中方法的访问属性都必须是 public 的。 4.类中如果有构造方法.那么这个构造方法也是 public 的并且是无参数的 5.构造方法:初始化一个对象的最终步骤是去调用这个对象的构造方法。构造方法 负责对象的初始化工作,为实例变量赋予合适的初始值。构造方法必须满足以 下语法规则:
内蒙古科技大学 教 案 (1)方法名必须与类名相同。 (2)不要声明返回类型。 6.为了能让使用这个bcam的应用程序构建工具(比如SP引擎)知道这个cam的属 性和方法,类的方法命名遵循以下规 (1)如果类的成员变量名字是x,获取或更改属性,类中必须提供两个方法: getXxx(),用来获取属性xx: etXxx0用来修改属性Xxx (2)对于boolean类型的成员变量,允许使用is代替上面的gct和st (3)类中声明的方法的访问属性必须是public的。 (4)类中声明的构造方法必须是public,无参数的。 (四)编写简单的bean 1.beam必须带有包名。使用package语句给bean一个包名。包名可以是一个合法 的标识符,也可以是若干个标识符加“”分割而成。 例:package gping: package myClass.myCircle 2.程序如果使用了包语句。例如: package myClass myCircle: (1)Circle.java文件保存在: D:\Doct ments and Settings (2)Cirele.clas文件保存在 D:\Documents and Settings\zxlworkspace \ch4\Webroot web-inElclasses\myclassimycircle D\Pro omcat-6.0.18\webapps\ch4 WEB-INF\classes\myClass\myCircle 二、使用bean (一)保证bean的字节码文件已存放到Tomcat的类文件夹中。 首先:在使用bean的JSP页面中,必须有相应的import指令,例如: %page im 其 在 (二)使用JSP动作标签useBean。 (三)useBean格式: <jsp:useBean id-“给bean起的名字"class-"创建bean的类”scope=-bean有效范 围></jp:useBean>或<jsp:useBcan id-给bean起的名字"clas-“创建bean的类 n右效节用4/ 注:创建bean的类要带有包名,如:Class=-myClas.myCirele.Cirele (四)scope取值 Javabean有效范围(scope) ■page ■request ■application 第2页
内 蒙 古 科 技 大 学 教 案 第 2 页 (1)方法名必须与类名相同。 (2) 不要声明返回类型。 6.为了能让使用这个bean的应用程序构建工具(比如JSP引擎)知道这个bean的属 性和方法,类的方法命名遵循以下规则 (1)如果类的成员变量名字是 xxx,获取或更改属性,类中必须提供两个方法: getXxx(),用来获取属性 xxx ; setXxx(),用来修改属性 xxx 。 (2)对于 boolean 类型的成员变量,允许使用 is 代替上面的 get 和 set。 (3)类中声明的方法的访问属性必须是 public 的。 (4)类中声明的构造方法必须是 public,无参数的。 (四)编写简单的 bean 1.bean 必须带有包名。使用 package 语句给 bean 一个包名。包名可以是一个合法 的标识符,也可以是若干个标识符加“.”分割而成。 例:package gping; package myClass.myCircle ; 2. 程序如果使用了包语句。例如: package myClass.myCircle; (1)Circle.java 文件保存在: D:\Documents and Settings\zxl\workspace \ch4\src\myClass\myCircle (2)Circle.class 文件保存在: D:\Documents and Settings\zxl\workspace \ch4\WebRoot\WEB-INF\classes\myClass\myCircle D:\Program Files\apache-tomcat-6.0.18\webapps\ch4\ WEB-INF\classes\myClass\myCircle 二、使用 bean (一)保证 bean 的字节码文件已存放到 Tomcat 的类文件夹中。 首先:在使用 bean 的 JSP 页面中,必须有相应的 import 指令,例如: <%@ page import=“myClass.myCircle.*”%> 其次:在 JSP 页面中再使用 JSP 动作标记 useBean,来加载使用 bean。 (二)使用 JSP 动作标签 useBean。 (三)useBean 格式: <jsp:useBean id=“给 bean 起的名字”class=”创建 bean 的类” scope=“bean 有效范 围”></jsp:useBean>或<jsp:useBean id=”给 bean 起的名字”class=“创建 bean 的类” scope=”bean 有效范围“/>。 注:创建 bean 的类要带有包名,如:Class=“myClass.myCircle.Circle” (四)scope 取值 Javabean 有效范围(scope): ◼ page ◼ session ◼ request ◼ application
内蒙古科技大学 教 案 1.coe取值nage JSP引擎分配给每个客户的bean是互不相同的,也就是说.尽管每个客户的bea 的功能相同,但它们占有不同的内存空间。该bcan的有效范围是当前页面,当客户离 开这个页面时.JSP引擎取消分配给该客户的bean。 ■2.s0ope取值session ■(I)JSP引擎分配给每个客户的bean是互不相同的,该bean的有效范用是客片 的会话期间.如果客户在多个页面中相互链接,每个页面都含有一个use Bear 这些 标签中d的值相同,并且sope的值都是 如果 际花其个面更政这个的属,花个a的展也将安程 同样的变化。当客户关闭浏览器时,JSP引擎取消分配给客户的ban。 (2)要保证客户端支持cookie. 3.scope取值rues 。]SP写引擎分配给每个客户的beam是互不相同的,该beam的有效范围是reques 期间 客户在网站的访问期间可能请求过多个页面,如果 些页面含有scop 取值是request的useBean标签,那么pageCotent对象在每个页面分配给客片 的bean也是互不相同的。JSP引擎对请求做出响应之后,取消分配给客户的这 个bean. 每个客户分配一个共享的bcan,也就是说,所有客户共享这个bean 如果 个客户改变这个bean的某个属性的值,那么所有客户的这个bean的属 性值都发生了变化。这个bean直到服务器关闭才被取消。 (六)useBean动作标签的JSP页面加载过程 执行衬程. ■(L)根据id的名字,在一个同步块中,查找JSP引擎内置pageContent对象中是 否含有名字id和作用域scope的对象: (2)若这个对象存在,JSP引擎就分配一个这样的对象给客户:若不存在, 则创建一个名字是id的beans,.添加到内置对象中,并指定其作用域为scope。 §4.2bean的存放目录 )例: D:\Program Files\apache-tomcat-6.0.18\ webapps\ch4\WEB-INFlclasses 然后在classes下依据bean的包名建立对应的目录结构,bean的字节码文件须保存 到对应的目录结构中 D:Program Fileslapache-tomcat-6.0.18 webappsch4\WEB-INF\classes\myClassmyCircle 。L.JSP引擎首先检查对应的bean的字节码文件是否被修改过,如果被重新修 改过,就会用新的字节码文件创建一个bcan ■2.bean的名字是id,并添加到pageContent内置对象中,并指定该对象的作用域 。是闲引分配给客户一个作用装是名字是的em 是 L(二)获取和修改bean的属性 第3页
内 蒙 古 科 技 大 学 教 案 第 3 页 1.scope 取值 page JSP 引擎分配给每个客户的 bean 是互不相同的,也就是说.尽管每个客户的 bean 的功能相同,但它们占有不同的内存空间。该 bean 的有效范围是当前页面,当客户离 开这个页面时.JSP 引擎取消分配给该客户的 bean。 ◼ 2.scope 取值 session ◼ (1)JSP 引擎分配给每个客户的 bean 是互不相同的,该 bean 的有效范围是客户 的会话期间.如果客户在多个页面中相互链接,每个页面都含有一个 useBean 标签,这些 useBean 标签中 id 的值相同,并且 scope 的值都是 session。如果客 户在某个页面更改了这个 bean 的属性,其它页面的这个 bean 的属性也将发生 同样的变化。当客户关闭浏览器时,JSP 引擎取消分配给客户的 bean。 (2)要保证客户端支持 cookie. 3.scope 取值 request ◼ JSP 引擎分配给每个客户的 bean 是互不相同的,该 bean 的有效范围是 request 期间。客户在网站的访问期间可能请求过多个页面,如果这些页面含有 scope 取值是 request 的 useBean 标签,那么 pageCotent 对象在每个页面分配给客户 的 bean 也是互不相同的。JSP 引擎对请求做出响应之后,取消分配给客户的这 个 bean。 4.scope 取值 request ◼ JSP 引擎为每个客户分配一个共享的 bean,也就是说,所有客户共享这个 bean, 如果一个客户改变这个 bean 的某个属性的值,那么所有客户的这个 bean 的属 性值都发生了变化。这个 bean 直到服务器关闭才被取消。 (六)useBean 动作标签的 JSP 页面加载过程 执行过程: ◼ (1)根据 id 的名字,在一个同步块中,查找 JSP 引擎内置 pageContent 对象中是 否含有名字 id 和作用域 scope 的对象: ◼ (2) 若这个对象存在,JSP 引擎就分配一个这样的对象给客户;若不存在, 则创建一个名字是 id 的 beans,添加到内置对象中,并指定其作用域为 scope。 §4.2 bean 的存放目录 (一)例: D:\Program Files\apache-tomcat-6.0.18\ webapps\ch4\WEB-INF\classes 然后在 classes 下依据 bean 的包名建立对应的目录结构,bean 的字节码文件须保存 到对应的目录结构中 D:\Program Files\apache-tomcat-6.0.18\ webapps\ch4\WEB-INF\classes\myClass\myCircle ◼ 1. JSP 引擎首先检查对应的 bean 的字节码文件是否被修改过,如果被重新修 改过,就会用新的字节码文件创建一个 bean; ◼ 2.bean 的名字是 id,并添加到 pageContent 内置对象中;并指定该对象的作用域 是 scope; ◼ 3.同时 JSP 引擎分配给客户一个作用域是 scope、名字是 id 的 bean. (二)获取和修改 bean 的属性
内蒙古科技大学 教 案 ■方法1:在Java程序片中可以调用这个ban的方法产生行为,比如修改属性.使 用举中的方法等 ■方法2:可以使用动作标签getProperty、setProperty获取和修效bean的属性 ,getProperty动作标签 使用该标签可以获得bcan的属性值,并将这个值以字符串的形式显示给客户。使用这 个标签之前.必须使用useBean标签获取一个bean。 例: <jsp:getProperty name="bean的名称”property=bean的属性”b jsp:getProperty name=-bean的名称”property=-bean的属性 </jsp:getProperty> 二、setProperty动作标签 使用该标签可以设置bean的属性值。使用这个标签之前.必须使用useBean标签得到 -个可操作的hn 种设置方式 l.将bena属性的值设置为一个表达式的值或字符串。例: ·ben属性的值设置为一个表达式的值: <jsp:setProperty name=-"bean的名字property-"bean的属性“value=”<% ression%>/> ·bea属性的值设置为一个字符串 <jsp:setProperty name- bcan的名字”property=-bean的属性”value=-字符串/> 2.如果将表达式的值设置为bean属性的值,表达式值的类型必须和bean的属性 的类型一致。 3.如果将字符串设置为bean的属性的值,这个字符串会自动被转化为bean的属 性的卷型。 4,java字符串转换 ·JAVA中整型和字符串相互转换的方法: (1)将字符串转化为整型: inti=Integer.parselnt(String str) inti=Integer alueOf().intValue() ·字串转成Double,Float,Long的方法大同小异 (2)整型转化为字符串: String str=String.valueOf(int i); String str=Integer.totring(ni) String str 注:Double,.Float,.Long的方法大同小异。 其它类型向字符串的转换 ①调用类的串转换方法X.toString0(: ②自动转换X+ (③)字符串作为值,向其它类型的转换 第4页
内 蒙 古 科 技 大 学 教 案 第 4 页 ◼ 方法 1:在 Java 程序片中可以调用这个 bean 的方法产生行为。比如修改属性.使 用类中的方法等。 ◼ 方法 2:可以使用动作标签 getProperty、setProperty 获取和修改 bean 的属性。 一、getProperty 动作标签 使用该标签可以获得 bean 的属性值,并将这个值以字符串的形式显示给客户。使用这 个标签之前.必须使用 useBean 标签获取一个 bean。 例: <jsp:getProperty name= “bean 的名称” property= “bean 的属性" /> <jsp:getProperty name= “bean 的名称” property= “bean 的属性" > </jsp:getProperty> 二、setProperty 动作标签 使用该标签可以设置 bean 的属性值。使用这个标签之前.必须使用 useBean 标签得到 一个可操作的 bean。 (一)第一种设置方式 1.将 bena 属性的值设置为一个表达式的值或字符串。例: · bean 属性的值设置为一个表达式的值: <jsp:setProperty name=”bean 的 名字 “property=”bean 的 属性 “ value=’’<% =expression%>”/> ·bena 属性的值设置为一个字符串: <jsp:setProperty name=“bean 的名字”property=“bean 的属性” value=字符串/> 2.如果将表达式的值设置为 bean 属性的值,表达式值的类型必须和 bean 的属性 的类型一致。 3.如果将字符串设置为 bean 的属性的值,这个字符串会自动被转化为 bean 的属 性的类型。 4.java 字符串转换 ·JAVA 中整型和字符串相互转换的方法: (1)将字符串转化为整型; int i = Integer.parseInt(String str); int i = Integer.valueOf().intValue(); 注:Integer.parseInt 和 Integer.valueOf 不同,前者生成的是整型,而后者是 一个对象,所以要通过 intValue()来获得对象的值; ·字串转成 Double, Float, Long 的方法大同小异. (2) 整型转化为字符串: String str = String.valueOf(int i); String str = Integer.toString(int i); String str = “” + i ; 注: Double, Float, Long 的方法大同小异. 其它类型向字符串的转换 ①调用类的串转换方法:X.toString(); ②自动转换:X+“”; ③使用 String 的方法:String.volueOf(X); (3)字符串作为值,向其它类型的转换
内蒙古科技大学 教 案 ①先转换成相应的封装器实例,再调用对应的方法转换成其它类型 例如,字符中“32.1"转换double型的值的格式为:DoubIe.valueof(“32.1.doubleValu ②静态parseXXX方法 Strings="1": byte b=Byte.parseByte(s); short t=Short.parseShort(s ) inti=Integer.parselnt(s) ong(s月 Floatf=Float.parseFloat(s); Double d=Double.parseDouble(s). ·注意这些方法都可能发生NumberFormatException异常。 try ()catch (NumberFormatExceptione)() (二)第二种设置方 1通过HP 单的参数的值来设置bean的相应属性的值,要求表单参数名字必 须与bean属性的名字相同.JSP引擎会自动将字符串转换为bean属性的类型。 例:<jsp:setProperty names=bean的名字”propertv=“*”/> 该标签不用再具体指定ban属性的值将对应表单中哪个参数指定的值,系统 会自动根据名字进行般配对应 2.只有提 bcan相对应的表单后,该指令标签才被执行 3.使用这种方式设置和获取bean的值很方便,可以把汉字的处理放在了bean中 但是如果使用第1种方式,不要在bean中处理汉字,而应当在JSP页面中处 理。 (三)第三种设置方式 :的参数的值来设置bean的相应属性的值,要求 equest参数名字 须与bcan属性的名字相同,JSP引擎会自动将request获取的字符串数据类型 转换为bean相应的属性的类型。 <jp:setProperty name="bean的名字”property=“属性名”param="参数名"/> 2.只有提交了和该bean相对应的表单后该指令标签才被执行, 3不能在 Property>.中同时使用value和param参数 (四)三种设置方式 l.jp:setProperty name-"bean的名字property=-bean的属性“value=”<% =expression%>”/> sp:setProperty name-bcan的名字"propert-=bean的属性"value=-字符串/> 2.<isp: bcan的名字 property- 3p:Properyme=eam的名字pope属性名param=参数名/> §4.3 Javabean应用实例 一、计数器beans 创建一个application的beans(Counter.java)之后编写jp程序,使用Counter.cas 实现计数。 见Ex4 counter.jsp 三、购物车beans 第5页
内 蒙 古 科 技 大 学 教 案 第 5 页 ①先转换成相应的封装器实例,再调用对应的方法转换成其它类型 例如,字符中“32.1”转换 double 型的值的格式为:Double.valueof(“32.1”).doubleValue ②静态 parseXXX 方法 String s = "1"; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Float f = Float.parseFloat( s ); Double d = Double.parseDouble( s ); ·注意这些方法都可能发生 NumberFormatException 异常。 try{}catch(NumberFormatException e){} (二)第二种设置方式 1.通过 HTTP 表单的参数的值来设置 bean 的相应属性的值,要求表单参数名字必 须与 bean 属性的名字相同.JSP 引擎会自动将字符串转换为 bean 属性的类型。 例:<jsp:setProperty name=“bean 的名字” property=“*”/> 该标签不用再具体指定 bean 属性的值将对应表单中哪个参数指定的值,系统 会自动根据名字进行般配对应。 2.只有提交了和该 bean 相对应的表单后,该指令标签才被执行。 3.使用这种方式设置和获取 bean 的值很方便,可以把汉字的处理放在了 bean 中, 但是如果使用第 1 种方式,不要在 bean 中处理汉字,而应当在 JSP 页面中处 理。 (三)第三种设置方式 1.通过 request 的参数的值来设置 bean 的相应属性的值,要求 request 参数名字必 须与 bean 属性的名字相同,JSP 引擎会自动将 request 获取的字符串数据类型 转换为 bean 相应的属性的类型。 <jsp:setProperty name=”bean 的名字” property=“属性名” param=”参数名”/> 2.只有提交了和该 bean 相对应的表单后该指令标签才被执行。 3.不能在<jsp:setProperty>中同时使用 value 和 param 参数。 (四)三种设置方式 1.<jsp:setProperty name=”bean 的名字“property=”bean 的属性“ value=’’<% =expression%>”/> <jsp:setProperty name=“bean 的名字”property=“bean 的属性” value=字符串/> 2.<jsp:setProperty name=“bean 的名字” property=“*”/> 3.<jsp:setProperty name=”bean 的名字” property=“属性名” param=”参数名”/> §4.3 Javabean 应用实例 一、计数器 beans 创建一个 application 的 beans(Counter.java)之后编写 jsp 程序,使用 Counter.class 实现计数。 见 Ex4_counter.jsp 二、购物车 beans