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为前缀,后缀是将属性(成员变量)名字的首字母大写的字

符序列。就比如:

Javabean的设计规则是什么_Javabean的设计规则是什么

(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.javapackage 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 源文件中) 。