jsp使用JavaBean分离表示与实现(1).ppt_第1页
jsp使用JavaBean分离表示与实现(1).ppt_第2页
jsp使用JavaBean分离表示与实现(1).ppt_第3页
jsp使用JavaBean分离表示与实现(1).ppt_第4页
jsp使用JavaBean分离表示与实现(1).ppt_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章 使用JavaBean分离表示与实现,在当今各类JSP网站开发标准中,有两种使用JSP的方式,他们分别被称为模式一和模式二。 模式一是JSP+JavaBean的结合 模式二是JSP+JavaBeanServlet的结合。 这两种模式是当今大中型应用程序的基础,这两种模式中最重要的就是JavaBean的开发, JavaBean用来封装业务逻辑。,6.1 剖析JavaBean,按照sun公司的定义,JavaBean是一个可重复使用的软件组件.类似于Microsoft的COM组件概念。 什么是组件? 独立的模块 外界不了解其内部实现 外界通过其提供的接口对组件进行访问 可以重用 目前有代表性的组件技术 COM、COM+、JavaBeans、EJB等 实际上,JavaBean是一种java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称Beans.,JavaBean 组件和企业级EJB (Enterprise JavaBean)组件概念完全不同。 EJB是J2EE的核心技术,它为开发服务器端应用程序组件提供了一个模型,利用这个模型来创建可移植性与分布式企业应用程序服务器或组件。 EJB定义了一个用于开发基于组件的企业多重应用程序的标准。 EJB是一个用来创建分布式、服务器端以及基于Java的企业应用程序组件的功能强大的组件模型。,JavaBean的特点:,1.可以实现代码的重复利用 2.易编写 易维护 易使用 3.可以在任何安装java运行环境的平台上使用,而不需要重新编译,JavaBean用途:,JavaBean传统的应用在可视化领域,现在它更多的应用在不可视化领域,它在服务器端应用方面表现出了越来越强的生命力。自从Jsp诞生后,JavaBean更多的应用在了非可视化领域,在服务器端应用方面表现出来了越来越强的生命力。在这里我们主要讨论的是非可视化的JavaBean,非可视化的JavaBean,顾名思义就是没有GUI界面的JavaBean。 不可视化的JavaBean在JSP程序中主要用来封装事务逻辑、数据库操作等,这样可以很好地实现业务逻辑和前台界面的分离,使得系统具有更好的健壮性和灵活性。,一个简单的例子,比如说一个购物车程序,要实现购物车中添加一件商品这样的功能,就可以写一个购物车操作的JavaBean,建立一个public的AddItem成员方法,前台Jsp文件里面直接调用这个方法来实现。如果后来又考虑添加商品的时候需要判断库存是否有货物,没有货物不得购买,在这个时候我们就可以直接修改JavaBean的AddItem方法,加入处理语句来实现,这样就完全不用修改前台jsp程序了。当然,也可以把这些处理操作完全写在jsp程序中,不过这样的jsp页面可能就有成百上千行,光看代码就是一个头疼的事情,更不用说修改了。由此可见,通过JavaBean可以很好地实现逻辑的封装、程序的易于维护等等。 如果您使用Jsp开发程序,一个很好的习惯就是多使用JavaBean。,6.1.1 什么是JavaBean,JavaBean是Java的可重用组件技术,实质是一种符合某些命名和设计规范的Java类 JavaBean通常封装成为具有特定功能或者处理某个业务(如连接数据库,访问数据库) 应用: JSP页面内可以访问JavaBean的对象以及它的方法。 在JSP的Web应用中集成JavaBean组件,由JavaBean中处理业务逻辑,然后在JSP中调用,而JSP页面着重网页界面的设计,可以实现业务逻辑和前台显示的部分分离。,JavaBean简介,使用JavaBean的好处: 可以使得JSP页面变得清晰; 节省软件开发时间(可以直接使用已经测试和可信的已有组件,避免了重复开发); 降低系统维护的难度 JavaBean的分类 可视的JavaBean:传统的JavaBean应用于可视化界面(如java图形界面中使用的按钮、文本框或列表框等等)。 非可视化的JavaBean:封装逻辑、封装数据,与JSP搭配使用。,JavaBean是使用一种符合某些命名方法和设计规范的Java类。创建JavaBean并不是一件困难的事情,如果您写过Java程序的话那就很容易了。 要注意的一点就是在非可视化JavaBean中,常用getXxx()或者setXxx()这样的成员方法来处理Bean的属性(Properties)。 下面让我们来看一个简单的JavaBean,package test; import java.io.*; public class FirstJavaBean private String firstProperty = new String(“); public FirstJavaBean() public String getFirstProperty() return firstProperty; public void setFirstProperty(String value) firstProperty = value; public static void main(String args) System.out.println(“My First JavaBean!“); ,JavaBean的简单例子,如果运行这个程序,就会出现下面的结果: First JavaBean! 这是一个很典型的JavaBean的代表,简单地解释一下,firstProperty是其中的一个属性(Property),外部通过get/set方法可以对这个属性进行操作,如果您写过VB的class的话,对这个就再也熟悉不过了。Main方法是为了测试程序用的,写JavaBean可以先不必加入到Jsp程序中调用,而直接用main方法来进行调试,调试好以后就可以在Jsp程序中调用了。,下面再来看一个简单的JavaBean。 package MyBean; public class FisrtJavaBean private String firstProperty=“*”; public FirstJavaBean() public String getFirstProperty() return firstProperty; public void setProperty(String value) firstProperty=value; ,私有属性,构造函数,调用FirstJavaBean的fbean.jsp程序如下:,6.1.2 JavaBean的特征,JavaBean具有以下特点: (1) JavaBean类必须有一个公有的没有参数的构造函数,这个构造函数在使用实例化JavaBean类时调用。如果JavaBean类内没有任何构造函数,系统会自动生成一个没有参数的构造函数。 (2) JavaBean内的属性都应该定义为私有的 (3)属性通过setXxx()的getXxx()来操作,创建一个标准JavaBean的基本语法如下。 (1) 定义JavaBean类 JavaBean类定义的语法结构如下: package 包名; public class 类名 构造方法(); 属性(Property); 方法(Method); 分析:编写JavaBeans就是编写一个Java的类,这个类创建的一个对象称作一个beans。,其中需要强调的是,类名称与保存的文件名称必须一致,否则就会出现编译错误。同时,类必须声明为公有类,即public。 如:public class CarBean private String maker; . ,(2) 定义JavaBean类的构造函数 JavaBean是Jave类,JavaBean就有自己的构造函数,并且构造函数的名称必须与JavaBean类的名称一致。构造函数的主要作用是用来初始化,而且构造函数无参数输入,其语法结构如下: public JavaBean类名称() /初始化 例如: public CarBean() ,(3) 定义JavaBean属性 JavaBean是Java类,那么它不但有自己的构造函数,还有自己的属性。JavaBean属性的定义的语法结构如下: private 数据类型 属性名称; 例如:private String maker;,JavaBean的属性简介,1.JavaBean的属性与普通Java类的属性的概念不一样,JavaBean的属性是以方法定义的形式出现的。 2.用于对属性赋值的方法称为属性修改器或setter方法,用于读取属性值的方法称为属性访问器或getter方法。 3.属性修改器必须以小写的set 前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,nickName属性的修改器名称为setNickName,password属性的修改器名称为setPassword。,4.属性访问器通常以小写的get 前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,nickName属性的访问器名称为getNickName,password属性的访问器名称为getPassword。 5.JavaBean的属性名是根据setter方法与getter方法的名称来生成的, setter方法或getter方法中除去前缀“set”和“get”后的部分即为属性名,但属性名的首字母必须小写。 6.属性分类:只读/读写/只写,简单/复杂,(4) 设定JavaBean属性值的方法 定义了JavaBean属性之后,还要对其属性值进行设定,其属性值设定的语法结构如下: public void set设定方法名称(数据类型 参数) this.变量=参数; 例如: public void setMaker(String maker) this.maker=maker; ,(5) 读取JavaBean属性值的方法 上面讲述了如何设定JavaBean属性值,那么属性值设定好之后,如何读取呢?JavaBean属性值读取的语法结构如下: public 数据类型 get读取方法名称() return this.变量; 例如: public String getMaker() return this.maker; ,练习:,如P90,创建一个标准JavaBeanRoom.java,6.2 开发部署JavaBean,6.2.1 开发JavaBean 例 完成一个二元数学运算。 6.2.2 在Web服务器上部署JavaBean,直接在tomcat下部署如下图所示,JavaBean存放,在JavaBean的应用中首先如前所述创建一个满足JavaBean规范的程序,并将其编译成一个class字节码文件,为了让JSP文件访问到JavaBean,需要考虑怎么存放JavaBean编译产生的字节码文件,假设在tomcat下已建立一个myweb的站点应用,那么我们在myweb站点中各文件保存位置如下: myweb*.jsp - JSP文件保存在站点下 mywebWEB-INF -在myweb站点中建有WEB-INF文件夹 mywebWEB-INFclasses -该文件夹下面就是存放所有编译出来的class文件 mywebWEB-INFlib -这个目录下存放所有jar文件,JavaBean本身就是满足JavaBean设计规范的java程序,因此我们在文本编辑器中编辑java程序,通过JDK环境中将它编译成有效的class或jar文件,并按前文所述保存到相应文件夹中,就成为可供JSP文件调用的JavaBean文件。 现在编写JSP文件,其中包含动作标签,JSP网页通过该标签创建一个JavaBean对象,从而可以利用该JavaBean对象实现操作。 注意:如果修改和重新编译了JavaBean程序,则需要关闭和重新启动JSWDK的Web服务器以后修改的结果才会有效。如果仅仅修改JSP文件,则不用重新启动JSWDK的Web服务器。,calculate.jsp执行,输入3/0之后的执行结果如图,calculate.jsp先由调用SimpleCalculator类,使用设置JavaBean的属性: ,6.3 在JSP中使用JavaBean,需要使用以下几个动作元素 标签: 在网页中创建一个Bean对象 标签: 用于为Bean对象中的属性赋值 标签: 用于获取Bean对象中属性的值,6.3.1 调用JavaBean, 该标签用来在JSP页面中创建一个JavaBean实例,并指定它的名字及作用范围。语法如下: 上述语法的含义是:实例化一个”class”属性指定的类,并 把生成的对象绑定到“id”属性所指定的变量。因此 与下面的脚本段等价 注意:在执行过程中, 首先会尝试寻找已经存在的具有相同id和scope值的javabean实例,如果没有就会自动创建一个新的实例。,6.3.2 访问JavaBean,一个JavaBean一旦创建,就可以使用取得Bean的属性, 中的name属性值一定要与中的id属性值匹配。 除了可以使用访问Bean的属性外,还可以使用表达式调用其属性,例如在计算器实例中,下面两种表达式是等价的 第二种方式比较灵活。在6.2节计算器实例中,属性值参与运算,只能用第二种方式。,6.3.3 设置JavaBean的属性,,有几种不同的使用方式,以下是最简单的使用方式: / 其中name属性匹配的id属性;property属性是要改变的属性名;Value属性指定要改变的值,该值必须是字符串或者字符串表达式,系统会自动进行类型转换。 比较复杂一点的用法就是使用请求字符串自动匹配属性值,6.2节的实例用的就是这种方式,适用需要根据用户提交的表单改变很多Bean属性的情况。 另一种设置属性值的方式是直接在脚本段中显示调用Bean的方法,例如以下两种表达式是等效的:,” / ,6.3.4 类型自动转换规则,使用设置Bean属性值时,它的value属性值都是字符串类型,系统会根据Bean中对应的属性类型进行转换。 注意: 如果将表达式的值设置为beans属性的值,表达式值的类型必须和beans的属性的类型一致。如果将字符串设置为beans的属性的值,这个字符串会自动被转化为beans的属性的类型。,Java语言将字符串转化为其它数值类型的方法如下: 转化到int :Integer.parseInt(Sting s), 转化到long :Long.parseInt(Sting s), 转化到float :Float.parseInt(Sting s), 转化到double :Double.parseInt(Sting s), 这些方法都可能发生NumberFormatException异常, 例如,当试图将字符串:“ab23”转化为int型数据时就发生了NumberFormatException。,字符串到属性类型的转换方法,6.4 使用JavaBean的计数器实例,统计在线用户数,总结 JavaBean, 该标签用来在JSP页面中创建一个JavaBean实例,并指定它的名字及作用范围。语法如下: ,id属性,id属性代表JavaBean对象的变量名 可为同一 Bean 类指定不同的 id 值,例如: ,class 属性,class 属性JavaBean 的类名 Count Bean属于test包 ,type属性,type属性指定引用此对象的变量的类型。它可以将id属性值声明为指向实际bean的超类(super class)或者接口(Interface)类的变量。例如 MyClass实现了Runnable接口,变量thread1声明为Runnable类型,与下面的脚本段等价 ,class属性和type属性的区别,type属性不会创建对象,只是表示对象引用。 class属性分两种情况: 如果在scope指定的范围内,该JavaBean对象不存在,则创建这个JavaBean对象,相当于执行以下语句 Count id1=new Count(); Count id2=new Count(); 若该JavaBean对象已经存在,则不创建新对象,而是直接获得已存在对象的引用。,关于的type的疑问 以下两个jsp:usebean哪个对? 答:第一个对,第二错。 第一个没有class啊?答:不一定需要,如果bean已经创建了 第二个怎么错了?答:beanName一定要配合type使用 语法为: 类型规格是class,beanName,type三种属性的组合。,例如ch6/counter.jsp和都使用 是对同一个bean0做的操作。可把class=“count.counter”改为type 如果更改counter1.jsp中的id=“bean1”查看效果,scope 属性,scope 属性表明JavaBean对象存在的范围,可为如下几个值: page(默认) request session application 以上作用范围是越来越大。,page 作用域,客户每次请求访问JSP页面时,都会创建一个新的JavaBean对象。 JavaBean对象的有效范围仅是客户请求访问的当前页面。 JavaBean对象在下列情况下会结束生命期: 客户请求访问的当前页面执行完毕并向客户端发回响应。 客户请求访问的当前页面通过或标记将请求转发到另一个文件。,request 作用域,客户每次请求访问JSP页面时,都会创建一个新的JavaBean对象。 JavaBean对象的有效范围是: 客户请求访问的当前JSP网页 和当前JSP网页共享同一个客户请求的页面,即当前JSP网页中指令以及标记包含的其它JSP文件 当所有共享同一个客户请求的JSP页面执行完毕并向客户端发回响应时,JavaBean对象结束生命期。,request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。 举个简单的例子: jsp1.jsp jsp2.jsp ,运行jsp1.jsp可以正常显示数据,因为作用范围是request,相当于调用了request.setAttribute()方法, jsp2页通过request.getAttribute()来获得这个bean.如果把request改为page,就会抛出NullPointerExceptioin. 一个请求可以跨好几个JSP(include和forword)和Servlet(如filter).不过这里有一个需要注意的就是区别 和.如果上面的改为,即使scope为page也是正确的,是编译时包含,是运行时包含.前者就相当于宏,编译时替代,后者相当于函数,运行时返回.,session 作用域,只有当不同客户请求访问JSP页面时,才会创建一个新的JavaBean对象。 JavaBean对象的有效范围是同一个Session中的所有JSP文件。 JavaBean 对象被创建后,存在于整个Session 的生命周期内。,application 作用域,在整个Web应用中只会创建一个JavaBean对象。 JavaBean对象的有效范围是Web应用中的所有JSP文件。 JavaBean 对象被创建后,存在于整个Web应用的生命周期内。,下面看看具体的scope四个值的含义: page-JavaBean对象保存在pageContext对象中,有page范围JavaBean实例只能在当前创建这个JavaBean的JSP文件中进行操作, 这个实例只有在请求返回给客户端后或者转移到另外的JSP页面后才会释放掉。page范围的JavaBean常用于进行一次性操作的JavaBean,这样的Bean用的最多,比如大部分表单提交,Bean的一些计算处理等都可以使用page范围的JavaBean,request-JavaBean对象保存在request对象中,有request范围的JavaBean实例可以在处理请求所有JSP页面中都存在,这个对象只有在请求全部处理完毕后才会被释放掉,request范围的JavaBean常用于共享同一次请求的JSP页面中,比如判断用户登录功能,如果用户名密码合法就可以forward到一个合法页面中,否则就forward到一个出错页面,当然转移后的页面仍然能够得到用户的输入。,sessionJavaBean对象是保存在session范围的JavaBean实例的生存周期是整个session,只有当session过期后才能释放掉,这样常用于共享同一session的JSP页面,比如购物车一般就是放在session中的或者登陆后的用户信息等也可以在session中,注意%page标签中不要设置session=false,否则在这个JSP页面中session将不会起作用,幸好JSP默认session=true,所以可以不必管它了。,application-JavaBean对象保存在application对象中,有application范围的JavaBean对象的生存周期是整个application。这就意味着这样的JavaBean的生存周期是整个应用程序,当web Server停掉才会消失掉。这样的常用于共享同一application的JSP程序中,比如程序中一些经常用到配置东西如数据库连接URL,全局的计数器或者是聊天室中人员信息等。,scope的具体应用,上面讲了这么多,大家应用对JavaBean的生存周期有个基本的概念了,在这里我们结合几个简单的例子来看看scope在JavaBean中应用,以便大家能对scope有更深的了解,用来演示的是一个简单的积分处理程序,初始化为0,每一次访问会将积分加上10,我们使用了一个JavaBean文件,用于数值计算处理的,然后在前台使用几个scope设置不同的JSP文件调用这个JavaBean。,核心的JavaBean文件scope.java 演示page范围的JSP文件page.jsp通过刷新查看效果(把scope改为request范围看有何不同) 演示request范围的JSP文件request.jsp 和request1.jsp (把request.jsp范围改为page看有何不同;把forward改为include查看效果;改为静态包含查看效果) 演示session范围的JSP文件session.jsp文件 演示application范围的JSP文件application.jsp,执行过程,通过Bean提供的setXxx()方法设置 Bean 的简单属性和索引属性,语法如下: 其中propertyDetails可为如下之一 property=“*” property=“propertyName” property=“propertyName” param“paramName“ property=“propertyName“ value“ propertyValue “,标记,property=“*” 设置Bean的所有属性,要求Bean属性的名字和类型必须与request对象中参数相匹配 由于form传递的数据类型都是String,JSP会自动将参数转换成Bean属性对应的类型 若没有Bean属性对应的request参数值或参数值为空,则相应的Bean属性不会设置任何值,标记,property=“propertyName” 设置Bean指定的属性,要求Bean属性的名字和类型必须与request对象中参数相匹配 由于form传递的数据类型都是String,JSP会自动将参数转换成Bean属性对应的类型 若没有Bean属性对应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论