目录
5.1编写和使用JavaBean
5.1.1编写JavaBean
javabean的定义:javabean其实就是类创建的一个对象,编写javabean就是编写一个java类
为了能让使用bean的应用程序构建工具使用jsp动作标记知道bean的属性和方法,在类的命名上需要遵守一下规则:
(1)如果类的成员变量(也称bean的属性)的名字是xxx,那么为了获取或更改bean的属性值,那么类中必须提供两个方法:
getXxx(),用来获取属性;
setXxx(),用来修改属性;
(2)类中定义的方法的访问权限都必须是public的
(3)类中必须有一个构造方法是public,无参数的
5.1.2保存bean的字节码
为了使jsp页面使用bean,tomcat必须使用相应的字节码文件创建一个对象,及创建一个bean
为了让tomcat服务器能找到字节码文件,必须放到指定的文件中去:
例如创建了一个bean文件show.java,要把它放在\WEB-INF\classes\tom\jiafei目录下
但是编译的话要在源文件的父目录下编译
classes>javac tom\jiafei\show.java
5.1.3创建和使用bean
a.使用bean
使用JSP动作标记usebean加载使用bean,语法格式是:
<jsp:useBean id="bean的名字" class="创建bean的类" scope="bean的有效范围"/>
或者
<jsp:useBean id="bean的名字" class="创建bean的类" scope="bean的有效范围">
</jsp:useBean>
例如:
<jsp:useBean id="bean" class="tom.jiafei.bean" scope="request"/>
特别注意的是,其中"创建bean的类"要带包名
b.bean的加载原理
在Tomcat服务器管理的pageContent中内置对象中查找是否含有这样的bean(对象)。如果这样的bean(对象)存在,Tomcat服务器就复制这个bean对象给jsp页面,就是常说的Tomcat服务器分配这样的bean给JSP页面
c.bean的有效范围和生命周期
(1)page bean
scope取值为page的bean称为page bean,
bean的有效范围是用户访问的当前页面,存活时间直到当前页面执行完毕。
需要注意的是,不同用户的page bean也是互不相同的,也就是说当两个用户同时访问用一个jsp页面时,一个用户对自己page bean的属性改变不会影响到另一个用户
(2)session bean
它的有效范围是用户访问的Web服务目录下的各个页面,存活时间是用户的会话期,直到用户的会话完全消失。
如果用户访问Web服务目录下的多个页面,那么每个页面id相同的session bean是同一个bean,因此,用户在某个页面更改了这个session bean的属性值,其他页面的这个session bean的属性值也会发生变化
(3)request bean
有效范围是用户请求的当前页面,存活时间是从用户的请求产生到请求结束。
简单来说,request bean只在当前页面有效,直到响应结束。
需要注意的是,不同用户的request bean的也是互不相同的。也就是说当两个用户同时请求同一个JSP页面时,一个用户对自己request bean属性的改变,不会影响到另一个用户
(4)application bean
有效范围是当前Web服务目录下的各个页面,存活时间直到Tomcat服务器关闭。
任何一个用户对自己application bean属性的改变,都会影响到其他用户
注意:当使用session bean时,要保证用户端支持Cookie
例5-1中负责创建page bean的类是上述的Circle类,page bean 的名字是circle
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<style>
#textStyle{
font-family:宋体;font-size:36;color:blue
}
</style>
<HTML><body bgcolor = #ffccff>
<p id = "textStyle">
<jsp:useBean id="circle" class="tom.jiafei.Circle" scope="page" />
<%--通过useBean标记,获得有效期限是page,名字是circle的bean --%>
圆的初始半径是:<%=circle.getRadius()%>
<% double newRadius =100;
circle.setRadius(newRadius); //修改半径。
%>
<br>修改半径为<%= newRadius %>
<br><b>圆的半径是:<%=circle.getRadius()%>
<br><b>圆的周长是:<%=circle.circleLength()%>
<br><b>圆的面积是:<%=circle.circleArea()%>
</p></body></HTML>
5.2获取和修改bean属性
5.2.1 getProperty动作标记
可以使用getProperty动作标记来获取一个JavaBean的属性值。例如:
<jsp:getProperty name="person" property="name" />
该动作标记会调用指定名称的JavaBean(即person)的指定属性(即name)的getter方法,并将返回值输出到客户端。
5.2.2 setProperty动作标记:
可以使用setProperty动作标记来设置一个JavaBean的属性值。例如:
<jsp:setProperty name="person" property="name" value="Bing" />
该动作标记会调用指定名称的JavaBean(即person)的指定属性(即name)的setter方法,并将指定值(即"Bing")作为参数传递。
5.3 bean的辅助类:
除了直接使用动作标记外,还可以使用EL表达式或JSTL标签库来访问和操作JavaBean。例如:
<c:set target="{person}" property="name" value="Bing" />
{person.name}