目录
一、编写和使用JavaBean
1、编写JavaBean
编写JavaBean就是编写一个Java的类,所以只要会写类就能编写一个JavaBean。这个类创建的一个对象成为一个JavaBean,简称bean,分配给bean的变量(成员变量),也称为bean的属性。
为了能让使用bean的应用程序构建工具(比如Tomcat服务器)使用JSP动作标记知道bean的属性和方法,在类的命名上需要遵守以下规则:
(1)如果类的成员变量(也称bean的属性)的名字是xxx,那么为了获取或更改bean的属性的值,类中必须提供两个方法:
getXxx(),用来获取属性xxx.
setXxx(),用来修改属性xxx.
(2)类中定义的方法的访问权限都必须是public的。
(3)类中必须有一个构造方法是public、无参数的。
2、保存bean的字节码
为了使JSP页面使用bean,Tomcat服务器必须使用相应的字节码文件创建一个对象,即创建一个bean。为了让Tomcat服务器能找到字节码文件,字节码文件必须保存在特定的目录中。
3、创建与使用bean
1、使用bean
使用JSP动作标记useBean加载使用bean,语法格式是:
<jsp:useBean id = "bean的名字" class = "创建bean的类" scope = "bean有效范围"/>
或
<jsp:useBean id = "bean的名字" class = "创建bean的类" scope = "bean有效范围"/>
</jsp:useBean>
需要特别注意的是,其中的"创建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的有效范围和生命周期
scope的取值范围给出了bean的生命周期(存活时间),即scope取值决定了Tomcat服务器分配给用户的bean的有效范围和生命周期。
(1)page bean。scope取值为page的bean称为page bean,page bean的有效范围是用户访问的当前页面,存活时间直到当前页面执行完毕。Tomcat服务器分配给每个JSP页面的page bean是互不相同的。也就是说,尽管每个JSP页面的page bean的功能相同,但他们占有不同的内存空间。
page bean的有效范围是当前页面,当页面执行完毕,Tomcat服务器取消分配的page bean,即释放page bean所占有的内存空间。
(2)session bean。scope取值为session的bean称为session bean,session bean的有效范围是用户访问的Web服务目录下的各个页面,存活时间是用户的会话期(session)间,直到用户的会话消失(sesssion对象达到了最大生存时间或用户关闭自己的浏览器以及服务器关闭)。如果用户访问Web服务目录多个页面,那么每个页面id相同的session bean是同一个bean(占有相同的内存空间)。当用户的会哈(session)小时,Tomcat服务器取消所分配的session bean,即释放session bean所占有的内存空间。
(3)request bean。scope取值为request的bean称为request bean,request bean的有效范围是用户请求的当前页面,存活时间是从用户的请求产生到请求结束。Tomcat服务器分配给每个JSP页面的request bean是互不相同的。Tomcat服务器对请求作出响应之后,取消分配给这个JSP页面的request bean。简单地说,request bean只在当前页面有效,直到响应结束。request bean存活时间略长于page bean的存活时间,原因是Tomcat服务器认为页面执行完毕后,响应才算结束。
(4)application bean。scope取值为application的bean称为application bean。application bean的有效范围是当前Web服务目录下的各个页面,存活时间直到Tomcat服务器关闭。Tomcat服务器为访问Web服务目录的所有用户分配一个共享的bean,即不同用户的applicatin bean也都是相同的一个。也就是说,任何一个用户对自己application bean属性的改变,都会影响到其他用户。
二、获取和修改bean的属性
1、getProperty动作标记
使用getProperty动作标记可以获得bean的属性值,并将这个值用串的形式发送给用户的浏览器。使用getProperty动作标记之前,必须使用useBean动作标记获得相应的bean。getProperty动作标记的语法格式是:
<jsp:getProperty name = "bean的id" property = "bean的属性" />
或
<jsp:getProperty name = "bean的id" property = "bean的属性">
</jsp:getProperty>
其中name的取值是bean的id,用来指定要获取哪个bean的属性的值,property取值是该bean的一个属性的名字。
2、setProperty动作标记
使用setProperty动作标记可以设置bean的属性值.使用setProperty动作标记之前,必须使用useBean动作标记获得相应的bean。setProperty动作标记的语法格式是:
(1)将bean属性值设置为一个表达式的值或字符序列。
<jsp:setProperty name = "bean的id" property = "bean的属性"
value = "<%= expression %>"/>
<jsp:setProperty name = "bean的id" property = "bean的属性"
value ="字符序列"/>
value给出的值的类型要和bean的属性的类型一致。
(2)通过HTTP表单的参数值来设置bean的相应属性值。
1、用form表单的所有参数值设置bean相对应属性值的格式如下:
<jsp:setProperty name = "bean的id的名字" property ="*"/>
在setProperty标记的上述用法中不具体指定bean属性值将对应form表单中哪个参数指定的值,系统会自动根据名字进行匹配对应,但要求bean属性的名字必须在form表单中有名称相同的参数名字相对应,Tomcat服务器会自动将参数的字符串值转换为bean相对应的属性值
2、用form表单的某个参数的值设置bean的某个属性值的使用格式如下:
<jsp:setProperty name ="bean的名字" property ="属性名" param ="参数名"/>
setProperty标记的上述用法具体指定了bean属性值将对应表单中哪个参数名(param)指定的值,这种设置bean的属性值的方法,不要求property给出的bean属性的名字和param给出的参数名一致,即不要求bean属性的名字必须和表单中某个参数名字相同。
当把字符序列设置为bean的属性值时,这个字符序列会自动被转化为bean的属性类型。
三、bean的辅助类
在写一个创建bean的类时,除了需要用import语句引入JDK提供的类,可能还需要自己编写一些其他的类,只要将这样的类的包名和bean类的包名一致即可(也可以和创建bean的类写在一个Java源文件中)。