学习目的与要求
熟练掌握<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>等JSP的操作指令。
本章主要内容
- 编写JavaBean
- 在JSP中使用JavaBean
一个JSP页面通过使用HTML标记为用户显示数据(静态部分),页面中变量的声明、程序片以及表达式为动态部分,对数据进行处理。如果Java程序片和HTML标记大量掺杂在一起使用,将不利于JSP页面的扩展和维护。JSP和JavaBean技术的结合不仅可以实现数据的表示和处理分离,而且可以提高JSP程序代码重用的程度,是JSP编程中常用的技术。
1.编写JavaBean
JavaBean是一个可重复使用的软件组件,是遵循一定标准、用Java语言编写的一个类,该类的一个实例称为一个JavaBea,简称bean。JavaBean具有可重用、升级方便、不依赖与平台的特点。JavaBean又可以分为业务bean和数据bean。
业务bean:用于封装业务逻辑、数据库操作等;
数据bean:用于封装数据。
编写一个JavaBean就是编写一个Java类(该类必须带有包名),这个类创建的一个对像为一个bean,为了让JSP引擎(比如Tomcat)知道这个bean的属性和方法,JavaBean类必须遵守以下规则:
①如果类的成员变量的名字是name,那么为了获取或更改成员变量的值,在类中必须提供以下两个方法。
- getName():用来获取属性name。
- setName():用来修改属性name。
②对于boolean类型的成员变量,允许使用“is”代替上面的“get”和“set”。
③类中方法的访问权限必须是public。
④如果有构造方法,必须提供一个五参数的构造方法。
【例1】创建bean的源文件Rectangle.java(在包com.bean中)。该bean的作用是封装矩形的长宽高,并计算矩形的面积和周长。
Rectangle.java
package com.bean Rectangle{private double length;private double width;public Rectangle(){length = 20;width = 10;}public double getLength(){return length;}public void setLength(double length){this.length=length;}public getWidth(){return width;}public void setWidth(double width){this.width=width;}public double computerArea(){return length*width;}public double computerLength(){return (length+width)*2;}
}
2.在JSP中使用JavaBean
在JSP页面中使用bean时,首先使用page指令的import属性导入创建bean的类,例如
<%@ page import="com.bean.*"%>
2.1 动作标记useBean
useBean动作标记用来查找或者实例化一个JavaBean。useBean标记的格式如下:
<jsp:useBean id="bean的名字" class="创建bean的类" scope="bean的有效范围"/>
或
<jsp:useBean id="bean的名字" type="创建bean的类" scope="bean的有效范围" />
例如:
<jsp:useBean id ="Rectangle" class="com.bean.Rectangle" scope="page" />
【例2】在JSP页面中使用useBean标记获得一个bean,负责创建bean的类是例5-1中的Rectangle类,bean的名字是rectangle,rectangle的scope取值为page。
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>example5_2.jsp</title>
</head>
<body>
<jsp:useBean id="rectangle" class="com.bean.Rectangle" scope="page"/>
<p>矩形的长是:<%=rectangle.getLength()%>
<p>矩形的宽是:<%=rectangle.getWidth()%>
<p>矩形的面积是:<%=rectangle.computerArea()%>
<p>矩形的周长是:<%=rectangle.computerLength()%>
</body>
</html>
2.2动作标记getProperty
JavaBean的实质是遵守一定规范的类所创建的对象,用户可以通过两种方式获取bean的属性:
①在Java程序片或表达式中使用bean对象调用getXxx()方法获取bean的属性值,比如例5-2中的语句<%%=rectangle.getWidth()%>;
②先通过<jsp:useBean>标记获得一个bean,再通过<jsp:getProperty>标记获取bean的属性值。
使用getProperty动作标记可以获得bean的属性值,注意,在使用该动作标记之前必须事先使用useBean动作标记获得一个相应的bean。getProperty动作标记的语法格式如下:
<jsp:getProperty name="bean的名字" property="bean的属性"/>
或
<jsp:getProperty name="bean的名字" property="bean的属性">
</jsp:getProperty>
2.3动作标记setProperty
除了可以在Java程序片中使用bean对象调用setXxx()方法修改bean的属性值外,还可以使用setProperty动作标记修改bean的属性值。注意,在使用该动作标记会签必须事先使用useBean动作标记获得一个相应的bean。使用setProperty动作标记进行bean属性值的设置有以下三种方式
①用表达式或字符串设置bean的属性
(1)用表达式设置bean的属性:
<jsp:setProperty name="bean的名字" property="bean的属性" value="<%=expression%>"/>
(2)用字符串设置bean的属性:
<jsp:setProperty name="bean的名字" property="bean的属性" value="字符串"/>
在用表达式修改bean属性值时,表达式值的类型必须与bean的属性类型一致。在用字符串修改bean属性值时,字符串会被转换为bean的属性类型,不能成功转换的可能会抛出NumberFormatException异常。
② 通过HTTP表单参数值设置bean的属性
<jsp:setProperty name="bean的名字" property="*"/>
这时,表单参数的名字必须与bean的名字相同,服务器会根据名字自动匹配,类型会自动转换。
③任意指定请求参数设置bean的属性
任意指定请求参数设置bean的属性:
<jsp:setProperty name="bean的名字" property="属性名" param="参数名"/>
用户可以根据自己的需要任意选择传递的参数,请求参数名无须与bean属性名相同。