熟练掌握<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>等JSP的操作指令。
一个JSP页面通过使用HTML标记为用户显示数据(静态部分),页面中变量的声明、程序片以及表达式为动态部分,对数据进行处理。如果Java程序片和HTML标记大量掺杂在一起使用,将不利于JSP页面的扩展和维护。JSP和JavaBean技术的结合不仅可以实现数据的表示和处理分离,而且可以提高JSP程序代码重用的程度,是JSP编程中常用的技术。
JavaBean是一个可重复使用的软件组件,是遵循一定标准、用Java语言编写的一个类,该类的一个实例称为一个JavaBea,简称bean。JavaBean具有可重用、升级方便、不依赖与平台的特点。JavaBean又可以分为业务bean和数据bean。
业务bean:用于封装业务逻辑、数据库操作等;
数据bean:用于封装数据。
编写一个JavaBean就是编写一个Java类(该类必须带有包名),这个类创建的一个对像为一个bean,为了让JSP引擎(比如Tomcat)知道这个bean的属性和方法,JavaBean类必须遵守以下规则:? ? ? ? ? ? ??
①如果类的成员变量的名字是name,那么为了获取或更改成员变量的值,在类中必须提供以下两个方法。
②对于boolean类型的成员变量,允许使用“is”代替上面的“get”和“set”。
③类中方法的访问权限必须是public。
④如果有构造方法,必须提供一个五参数的构造方法。
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;
}
}
在JSP页面中使用bean时,首先使用page指令的import属性导入创建bean的类,例如
<%@ page import="com.bean.*"%>
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>
? ? ? 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>
? ? ? 除了可以在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属性名相同。