资源预览内容
第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
第9页 / 共24页
第10页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第九讲 JSP与JavaBeans 教学目的 本讲讲述JSP中怎样使用JavaBeans 。 1 编写javabeans和使用javabeans 。 2 beans的存放目录,第九讲 JSP与JavaBeans,在谈论组件之前让我们看一个通俗的事情:组装电视机。组装一台电视机时,人们可以选择多个组件,例如电阻、电容、显象管等,一个组装电视机的人不必关心显象管是怎么研制的,只要根据说明书了解其中的属性和功能就可以了。不同的电视机可以安装相同的显象管,显象管的功能完全相同,但他们是在不同的电视机里面,一台电视机的显象管发生了故障并不影响其它的电视机;也可能两台电视安装了一个共享的组件:天线,如果天线发生了故障,两台电视机都受到同样的影响。 “可视化组件编程”非常成功的一个例子就是微软公司的VB。人们在使用VB编写程序时,经常把一个按钮组件或文本框组件拖放到你的应用程序窗体中,并了解这个按钮的名字、它有哪些功能、方法等,而且你还可以重新更改它的名字,当你创建生成应用程序时,这个按钮的名字被保存了下来。但是,微软的组件只适用于微软的操作平台上,不能为其它的平台所使用。,按着Sun公司的定义,JavaBeans是一个可重复使用的软件组件。实际上JavaBeans是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称beans。由于javabeans是基于java语言的,因此javabeans不依赖平台,具有以下特点: (1)可以实现代码的重复利用 (2)易编写、易维护、易使用 (3)可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。 我们已经知道,一个基本的JSP页面就是由普通的HTML标签和java程序片组成,如果程序片和HTML大量交互在一起,就显得页面混杂,不易维护。JSP页面应当将数据的处理过程指派给一个或几个beans来完成,我们只需在JSP页面中调用这个beans即可。不提倡大量的数据处理都用java程序片来完成。在JSP页面中调用beans,可有效的分离的静态工作部分和动态工作部分。,9.1 编写javabeans和使用javabeans,9.1.1 编写beans,Javabeans分为可视组件和非可视组件。在JSP中主要使用非可视组件。对于非可视组件,我们不必去设计它的外观,主要关心它的属性和方法。 编写javabeans就是编写一个java的类,所以你只要会写类就能编写一个beans,这个类创建的一个对象称做一个beans。为了能让使用这个beans的应用程序构建工具(比如JSP引擎)知道这个beans的属性和方法,只需在类的方法命名上遵守以下规则: (1)如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,即更改或获取属性,在类中就需要有两个方法: getXxx():用来获取属性xxx。 setXxx():用来修改属性xxx.。,续前页:,public int getRadius() return radius; public void setRadius(int newRadius) radius=newRadius; public double circleArea() return Math.PI*radius*radius; public double circlLength() return 2.0*Math.PI*radius; ,将上述java文件保存为Circle.java,并编译通过,得到字节码文件Circle.class。,9.1.2 使用beans,为了在JSP页面中使用benas,我们必须使用JSP动作标签:useBean useBean格式: 或 ,当服务器上某个含有useBean动作标签的JSP页面被加载执行时,JSP引擎将首先根据id的名字,在一个同步块中,查找JSP引擎内置pageContent对象中是否含有名字id和作用域scope的对象,如果这个对象存在,JSP引擎就分配一个这样的对象给客户,这样,客户就获得了一个作用域是scope、名字是id的beans(就像我们组装电视机时获得了一个有一定功能和使用范围的电子元件)。如果在pageContent中没有查找到指定作用域、名字是id的对象,就根据class指定的类创建一个名字是id对象,即创建了一个名字是id的beans,并添加到pageContent内置对象中,并指定该beans的作用域是scope,同时JSP引擎分配给客户一个作用域是scope、名字是id的beans。,下面就useBean标签中scope取值的不同情况阐述如下: scope取值page JSP引擎分配给每个客户的beans是互不相同的,也就是说,尽管每个客户的beans的功能相同,但它们占有不同的内存空间。该beans的有效范围是当前页面,当客户离开这个页面时,JSP引擎取消分配给该客户的beans。 scope取值session JSP引擎分配给每个客户的beans是互不相同的,该beans的有效范围是客户的会话期间,也就是说,如果客户在多个页面中相互连接,每个页面都含有一个useBeans标签,这些useBean标签中id的值相同,并且scope的值都是session,那么,该客户在这些页面得到的beans是相同的一个。如果客户在某个页面更改了这个beans的属性,其它页面的这个beans的属性也将发生同样的变化。当客户关闭浏览器时,JSP引擎取消分配给客户的beans。,scope取值request JSP引擎分配给每个客户的beans是互不相同的,该beans的有效范围是request期间。客户在网站的访问期间可能请求过多个页面,如果这些页面含有socope取值是request的useBeans标签,那么pageCotent对象在每个页面分配给客户的beans也是互不相同的。JSP引擎对请求作出响应之后,取消分配给客户的这个beans。 scope取值application JSP引擎为每个客户分配一个共享的beans,也就是说,所有客户共享这个beans,如果一个客户改变这个beans的某个属性的值,那么所有客户的这个beans的属性值都发生了变化。这个beans直到服务器关闭才被取消.。,注:当使用作用域是session的beans时,要保证客户端支持Cooker.,为了使服务器的所有web服务目录下的JSP页面文件都能使用我们的beans,我们必须将上面编译通过生成的字节码类文件:Circle.class拷贝到JSP引擎的classes文件夹下,即D:tomcatJakarta-tomcat-4.0classes下,如图9.1所示。 另外,在使用beans的JSP页面中,必须有如下的import指令: ,图9.1 在JSP引擎放置beans的目录,在下面的例子1中,负责创建beans的类是上述的Circle类,创建的beans的名字是girl,girl的scope取值page。,例子1 useBeans.jsp:, 圆的半径是: 圆的周长是: 圆的面积是: ,在下面的例子2中我们将beans的scope的值设为session 创建的beans的名字是girl,创建该beans的类文件仍然是上述的Circle.class。在beans1.jsp 页面中,girl的半径radius的值是1(图9.2),然后连接到beans2.jsp页面,显示半径radius的值,然后将girl的半径radius的值更改为400(图9.3),当再刷新beans1.jsp时会发现radius的值已经变成了400(图9.4)。,图9.2 beans1.jsp效果,图9.3 beans2.jsp效果,图9.4 刷新beans1.jsp后效果,例子2 (效果如图9.2、9.3、9.4所示) beans1.jsp:, 圆的半径是: beans2.jsp ,beans2.jsp:, 圆的半径是: 修改后的圆的半径是: ,在下面的例子3中,将beans的scope的值设为application。当第一个客户访问这个页面时,显示beans的属性radius的值,然后把这个属性的值修改为1000(图9.5)。当其它客户访问这个网页时,看到的这个属性的值都是1000(图9.6)。,例子3(效果如图9.5、9.6所示) appbeans.jsp:, 圆的初始半径是: 修改后的圆的半径是: ,9.2 beans的存放目录,(1)任何web服务目录都可使用的beans的存放位置 如果让任何web服务目录中的JSP页面都可以使用某个beans,那么创建这个beans的字节码文件需存放在Tomcat安装目录的classes目录中,例如,本书所用机器的Tomcat安装目录就是:D:tomcatJakarta-tomcat-4.0classes,如图9.1所示。 我们已经知道,当服务器上某个含有useBean动作标签的JSP页面被加载执行时,JSP引擎将首先根据id的名字,在一个同步块中,查找JSP引擎内置pageContent对象中是否含有名字id和作用域scope的对象,如果这个对象存在,JSP引擎就分配一个这样的对象给客户,这样,客户就获得了一个作用域是scope、名字是id的benas。如果在pageContent中没有查找到指定作用域、名字是id的对象,就根据class指定的类创建一个名字是id的对象,并添加到pageContent内置对象中,并指定该对象的作用域是scope,同时JSP引擎分配给客户一个作用域是scope、名字是id的beans。,JSP引擎的内置PageContenet对象用来存储供服务器使用的数据信息,通过该对象向客户提供不同类型的各种数据对象。当含有ussBeans标签的JSP页面被执行后,beans就被存放在pageContenet对象中,如果你更改了创建beans的java类文件后,pageContent对象中的beans并不能被更新,这是因为任何JSP页面再次被访问执行时,总是先到pageContenet中查找beans。而pageContent对象直到服务器关闭才释放它存储的数据对象。 (2)只对examples服务目录可用的beans的存放目录 examples是默认web服务目录之一,如图9.7,图9.7 存放beans的目录,如果想让某个beans只对examples目录下的JSP页面可用,那么创建该beans的字节码文件需存放在webapps/example/Web-inf/classes目录中,如图9.7所示。 存放在该目录中的beans和存放在上面(1)中所述的目录中的beans有所不同的是:JSP引擎首先检查webapps/example/Web-inf/classes目录中的创建该beans的字节码文件是否被修改过,如果重新修改过,就会用新的字节码文件创建一个beans,beans的名字是id,并添加到pageContent内置对象中,并指定该对象的作用域是scope,同时JSP引擎分配给客户一个作用域是scope、名字是id的beans。 如果经常调试beans,可以把beans放在webapps/example/Web-inf/classes。需要注意的是,当用户请求服务时,由于服务器引擎每次都要检查字节码文件是否被修改过,将降低服务器的运行效率。,下面是创建beans的java文件,将该文件编译通过,把字节码文件CircleTest.class存放到/webapps/example/Web-inf/classes目录中。,import java.io.*; public class CircleTest int radius; public CircleTest() radius=6500; public int getRadius() return radius; pu
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号