5.1编写和使用JavaBean
5.1.1编写JavaBean
编写JavaBean就是编写一个Java 的类,所以只要会写类就能编写一个JavaBean。这个类创建的一个对 象称为一个JavaBean,简称bean,分配给bean的变量(成员变量),也称bean的属性。为了能让使用bean的应用程序构建工具(比如Tomcat服务器)使用JSP动作标记知道bean的属性和方法,在类的命名上需要遵守以下规则:
(1) 如果类的成员变量(也称bean的属性)的名字是xxx,那么为了获取或更改bean的属性的值,类中必须提供两个方法:
getXx(), 用来获取属性xxx。
setXxx(),用来修改属性xXX。
5.1.2保存bean的字节码
为了使JSP页面使用bean, Tomcat服务器必须使用相应的字节码文件创建一个对象,即创建一个bean。为了让Tomcat服务器能找到字节码文件,字节码文件必须保存在特定的目录中
5.1.3创建与使用bean
(1)使用bean
(2)bean的加载原理
当JSP页面使用JSP动作标记useBean加载一个bean时,Tomcat服务器首先根据JSP动作标记useBean中id给出的bean名字以及scope给出的使用范围(bean生命周期),在Tomcat服务器管理的pageContent 内置对象中查找是否含有这样的bean(对象)。如果这样的bean(对象)存在,Tomcat服务器就复制这个bean(对象)给JSP页面,就是常说的Tomcat服务器分配这样的bean给JSP页面。如果在pageContent中没有查找到JSP动作标记要求的bean,就根据class指定的类创建-一个bean,并将所创建的bean添加到pageContent中。通过Tomcat服务器创建bean的过程可以看出,首次创建一个新的bean需要用相应类的字节码文件创建对象,当某些JSP页面再需要同样的bean时,Tomcat服务器直接将pageContent中已经有的bean分配给JSP页面,从而提高JSP页面bean的使用效率。
(3)bean的有效范围和生命周期
器分配给用户的bean的有效范围和生命周期,因此需要理解scope取值的具体意义。下面就JSP动作标记useBean中scope取值的不同情况进行说明。
(1) page bean。scope 取值为page的bean称为page bean,page bean 的有效范围是用户访问的当前页面,存活时间直到当前页面执行完毕。Tomeat 服务器分配给每个JSP页面的page bean是互不相同的。也就是说,尽管每个JSP页面的page bean的功能相同,但它们占有不同的内存空间。page bean的有效范围是当前页面.当页面执行完毕,Tomcat服务器取消分配的page bean,即释放page bean所占有的内存空间。需要注意的是,不同用户(浏览器)的page bean也是互不相同的。也就是说,当两个用户同时访问同一个JSP页面时,一个用户对自己pegebean的属性的改变.不会影响到另一-个用户。
(2) session bean。scope 取值为session的bean 称为session bean,session bean的有效范围是用户访问的Web服务目录下的各个页面,存活时间是用户的会话期(session)间,直到用户的会话消失(session对象达到了最大生存时间或用户关闭自己的浏览器以及服务器关闭,见4.3.1节)。如果用户访问Web服务目录多个页面,那么每个页面id相同的session bean是同一个bean(占有相同的内存空间)。因此,用户在某个页面更改了这个session bean的属性值,其他页面的这个sessionbean的属性值也将发生同样的变化。当用户的会话(session)消失,Tomcat服务器取消所分配的session bean, 即释放session bean所占有的内存空间。需要注意的是,不同用户(浏览器)的session bean是互不相同的(占有不同的内存空间)。也就是说,当两个用户同时访问同一个Web服务目录,一个用户对自己session bean属性的改变,不会影响到另一个用户(一个用户在不同Web服务目录的session bean互不相同)。
(3) request ben. scope 取值为request的ben称为request bean, request bean的有效范围是用户道求的当前页面,存活时间是从用户的请求产生到请求结束。Tomeat 服务器分配给每个ISP页面的rques bean是互不相同的。Tomcat服务器对请求作出响应之后,取消分配给这个ISP页面的roues ben简单地说trqwet bean只在当前页面有效,直到响应销火,M存质时回前长干 Ple的存话时间,原因是 Tomal服务器认为页面执行后。职应才的的来,国爱注意的总,不同用户的r ben的也处业不用同的山就是说,当两个用户同时请求同一个JSP页面时,个用户对自己 requet ben属性的改变,不会影响到另一个用户。
5.2获取和修 改bean的属性
5.2.1getProperty动作标记
使用getProperty动作标记可以获得bean的属性值,并将这个值用串的形式发送给用户的浏览器。使用getProperty动作标记之前,必须使用useBean 动作标视频i记获得相应的bean。
5.2.2setProperty动作标记
(1)将bean属性值设置为一个表达式的值或字符序列
(2)通过http表单的参数值来设置bean的相应属性值
5.3bean的辅助类
在写一个创建bean的类时,除了需要用import语句引入JDK提供的类,可能还需要自己编写一些其他的类,只要将这样类的包名和bean类的包名致即可(也可以和创建bean的类写在一个Java源文件中)。在下面的例5_ 5中,使用一个bean列出Tomcat服务器驻留的计算机上某目录中特定扩展名的文件。创建bean的ListFile类,需要一个实现FilenameFilter接口的辅助类FileExtendName,该类可以帮助bean列出指定扩展名的文件(把ListFile. java编译生成的字节码ListFile. class和FileExtendName. class复制到\ch4\ WEB INF\classes\tom\jiafei中)。
5.4JSP与bean结合的简单例子
5.4.1三角形 bean
5.4.2四则运算bean
5.4.3浏览图像bean
5.4.4日历bean
5.4.5计数器bean