5.1.1编写JavaBean
编写JavaBean 就是编写一个Java 的类,所以只要会写类就能编写一
JavaBean。这个类创建的一个对象称为一个JavaBean,简称bean,分配给bean的
变量(成员变量),也称bean的属性。为了能让使用bean的应用程序构建工具(H
如Tomcat服务器)使用JSP动作标记知道bean的属性和方法,在类的命名上午
要遵守以下规则:
(1)如果类的成员变量(也称bean的属性)的名字是xxx,那么为了获取或更改bean的显
性的值,类中必须提供两个方法:
getXxx(),用来获取属性xxx。
setXxx(),用来修改属性xxx。
也就是方法的名字用get或set为前缀,后缀是将属性(成员变量)名字的首字母大写的字
符序列。就比如:
(2) 类中方法的访问权限必须是public
(3) 如果有构造方法,必须有一个无参构造方法。
(4) 创建bean的类带有包名,即Java源文
5.1.2使用bean
1、为了使JSP页面使用bean,Tomcat服务器必须用相应的字节码文件创建一个对象。为了让Tomcat服务器能找到字节码文件,字节码文件必须保存在特定的目录中。
2、使用JSP动作标记useBean加载使用bean,语法格式是
<jsp:usebean id = "bean的名字" class = "创建bean的类" scope = "bean有效范围"/>
或
<jsp:usebean id = "bean的名字" class = "创建bean的类" scope = "bean有效范围">
</jsp:useBean>
例如:
<jsp:useBean id = "circle" class = "tom.jiafei.Circle" scope = "page"/>
3、获取和修改bean的属性
在使用动作标记前,须使用useBean标记得到一个相应的bean。
获得bean的属性值getProperty动作标记的语法格式是
<jsp:getProperty name = "bean的id" property = "bean的属性"/>
设置bean的属性值setProperty动作标记的语法格式是
<jsp:setProperty name = "bean的id" property = "*"/>
4、bean的辅助类,即在创建bean的类时,除了需要使用mport语句引入JDK提供的类,可能还需要自己编写的一些其他的类,只要将这样类的包名和bean类的包名一致即可。
5.1.3 bean的有效范围和生命周期
在上文中scope取值决定了Tomcat服务器分配给用户的bean的有效范围和生命周期。其取值如下:
1、page bean。有效范围是用户访问的当前页面,存活时间直到当前页面执行完毕。
2、session bean。有效范围是用户访问的Web服务目录下的各个页面,存活时间是用户的会话期间,直到用户的会话消失
3、request bean。有效范围是用户请求的当前页面,存活时间是从用户的请求产生到请求结束。
4、application bean。有效范围是当前Web服务目录下的各个页面,存活时间直到Tomcat服务器关闭。
5.2修改和获取bean的属性
getProperty 动作标记的语法格式是:
< jsp:getProperty name = "bean 的 id " property = “bean 的属性”/>
或
< jsp:getProperty name = "bean 的 id "property = “bean 的属性”>
< /jsp:getProperty >
其中,name 取值是 bean 的id,用来指定要获取哪个 bean 的属性的值,property 取值是该bean 的一个属性的名字。
让 request 调用 setCharacterEncoding 方法设置编码为 UTF-8,以避免显示 bean 的属性值出现乱码现象。
5.2.2、setProperty动作标记
setProperty 动作标志可以进过两种方式设置 bean 属性值。
(1) 将 bean 属性值设置为一个表达式的值或字符序列。
< jsp:setProperty name = "bean 的 id " property = “bean 的属性”
value = “<% = expression%>”/>
< jsp:setProperty name = "bean 的 id " property = “bean 的属性”
value = “字符序列”/>
value 给出的值的类型要和 bean 的属性的类型一致。
(2) 通过 HTTP 表单的参数值来设置 bean 的相应属性值。
用 form 表单的所有参数值设置 bean 相对应属性值的使用格式如下 :
< jsp:setProperty name = "bean 的 id 的名字"property= “*”/>
用 form 表单的某个参数的值设置 bean 的某个属性值的使用格式如下 :
< jsp:setProperty name = "bean 的名字"property = "属性名"param = “参数名”” />
当把字符序列设置为 beans 的属性值时,这个字符序列会日动被转化为 bean 的属性类型。Java 语言将字符序列转化为其他数值类型的方法如下 。
转化到 int: Integer. parseInt(Sting s)
转化到 long: Long. parseLong(Sting s)
转化到 float: Float. parseFloat(Sting s)
转化到 double: Double. parseDouble(Sting s)
这些方法都可能发生 NumberFormatException 异常,例如 ,当试图将字符序列 ab23 转化为 int 型数据时就发生了 NumberFormatException 。
例5_ 4使用Goods 类创建 request bean。example5 4 _a.jsp 通过form 表单指定example5 4 _a. jsp 和 example5 4 _b.jsp 中的request bean 的 name 和 price 属性值。example5 4 a.jsp 和example5 4 _b.jsp 使用 getProperty 动作标记以及 bean 调用方法两种方式显示 request bean 的 name 和 price 属性值。
代码如下:
example5_4_a.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<% request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="phone" class="tom.jiafei.Goods" scope="request"/>
<HTML><body bgcolor = #ffccff>
<style>
#textStyle{
font-family:宋体;font-size:20;color:blue
}
</style>
<p id = "textStyle">
<form action="" Method="post" >
手机名称:<input type=text id=textStyle name="name">
<br>手机价格:<input type=text id=textStyle name="price"/>
<br><input type=submit id=textStyle value="提交给本页面"/>
</form>
<form action="example5_4_b.jsp" Method="post" >
手机名称:<input type= text name="name" id=textStyle>
<br>手机价格:<input type=text name="price" id=textStyle>
<br><input type=submit id=textStyle value="提交给example5_4_b.jsp页面">
</form>
<jsp:setProperty name="phone" property="name" param ="name" />
<jsp:setProperty name="phone" property="price" param ="price"/>
<br><b>名称:<jsp:getProperty name="phone" property="name"/>
<br><b>名称:<%= phone.getName()%><br>
<br><b>价格:<jsp:getProperty name="phone" property="price"/>
<br><b>价格:<%=phone.getPrice()%>
</p></body></HTML>
example5_4_b.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<% request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="phone" class="tom.jiafei.Goods" scope="page"/>
<HTML><body bgcolor= cyan>
<p style="font-family:黑体;font-size:20;color:red">
<jsp:setProperty name="phone" property="name" param ="name" />
<jsp:setProperty name="phone" property="price" param ="price"/>
<br><b>名称:<jsp:getProperty name="phone" property="name"/>
<br><b>名称:<%= phone.getName()%><br>
<br><b>价格:<jsp:getProperty name="phone" property="price"/>
<br><b>价格:<%=phone.getPrice()%>
</p></body></HTML>
Goods.java
package tom.jiafei;
public class Goods {
String name="无名";
double price=0;
public String getName() {
return name;
}
public void setName(String newName){
name = newName;
}
public double getPrice() {
return price;
}
public void setPrice(double newPrice) {
price = newPrice;
}
}
5.3bean的辅助类
在写一个创建 bean 的类时,除了需要用 import 语句引入 JDK 提供的类,可能还需要自己编写一些其他的类,只要将这样类的包名和 bean 类的包名一致即可(也可以和创建 bean 的类写在一个 Java 源文件中) 。