第5章JSP与JavaBean
本章主要介绍在JSP程序中如何使用JavaBean组件。通过本章的学习,读者应熟练掌握、、等JSP的操作指令。
JavaBean的含义
JSP中使用JavaBean
一个JSP页面通过使用HTML标记为用户显示数据(静态部分),页面中变量的声明、程序片以及表达式为动态部分,对数据进行处理。如果Java程序片和HTML标记大量掺杂在一起使用,就不利于JSP页面的扩展和维护。JSP和JavaBean技术的结合不仅可以实现数据的表示和处理分离,而且可以提高JSP程序代码重用的程度,是JSP编程中常用的技术。
本章涉及的Java源文件保存在工程ch5的src中,涉及的JSP页面保存在工程ch5的WebContent中。
5.1编写JavaBean
JavaBean是一个可重复使用的软件组件,是遵循一定标准、用Java语言编写的一个类,该类的一个实例称为一个JavaBean,简称bean。JavaBean具有可重用、升级方便、不依赖于平台等特点。JavaBean又可分为业务bean和数据bean。业务bean用于封装业务逻辑、数据库操作等;数据bean用于封装数据。
编写一个JavaBean就是编写一个Java类(该类必须带有包名),这个类创建的一个对象称为一个bean,为了让JSP引擎(比如Tomcat)知道这个bean的属性和方法,JavaBean类必须遵守以下规则:
(1) 如果类的成员变量的名字是name,那么为了获取或更改成员变量的值,类中必须提供以下两个方法:
getName(),用来获取属性name。
setName(),用来修改属性name。
即方法的名字用get或set为前缀,后缀是首字母大写的成员变量的名字。
(2) 对于boolean类型的成员变量,允许使用“is”代替上面的“get”和“set”。
(3) 类中方法的访问权限必须是public。
(4) 构造方法必须无参数。
【例51】创建bean的源文件Rectangle.java(在包com.bean中)。该bean的作用是封装矩形的长和宽,并计算矩形的面积和周长。
例51 Rectangle.java的代码如下: package com.bean;
public class 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 double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double computerArea(){
return lengthwidth;
}
public double computerLength(){
return (length+width)2;
}
}JavaBean可以在任何Java程序编写环境下完成编写,再通过编译成为一个字节码文件,为了让JSP引擎(比如Tomcat)找到这个字节码,必须把字节码文件放在特定的位置。本书使用Eclipse集成环境开发JSP程序,Java类的字节码文件由Eclipse自动保存到Web工程的build\\classes中。例如,例51中的Rectangle.class文件保存在ch5\\build\\classes\\com\\bean目录中。
5.2JSP中使用JavaBean
在JSP页面中使用bean时,首先使用page指令的import属性导入创建bean的类,例如: <%@ page import="com.bean."%>5.2.1动作标记useBean
useBean动作标记是用来查找或者实例化一个JavaBean。useBean标记的格式为: 或例如: useBean标记中各属性的含义如表5.1所示。表5.1useBean标记中各属性的含义属性名描述id指定该JavaBean实例的变量名,通过id可以访问这个实例class指定JavaBean的类名。如果需要创建一个新的实例,Web容器会使用class指定的类,并调用无参数的构造方法来完成实例化scope指定JavaBean的作用范围,包括page、request、session和application。缺省值为page,表明此JavaBean只能应用于当前页;值为request表明此JavaBean只能应用于当前的请求;值为session表明此JavaBean能应用于当前会话;值为application则表明此JavaBean能应用于整个应用程序type指定JavaBean对象的类型,通常在查找已存在的JavaBean时使用,这时使用type将不会产生新的对象。如果是查找已存在的JavaBean对象,type属性的值可以是此对象的准确类名、其父类或者其实现的接口;如果是新建实例,则只能是准确类名或者父类。另外,如果能够确定此JavaBean的对象肯定存在,则指定type属性后可以省略class属性。当含有useBean动作标记的JSP页面被Web容器加载执行时,Web容器首先根据id的名字,在pageContent内置对象中查看是否含有名字为id和作用域为scope的对象;如果该对象存在,Web容器就将这个对象的副本(bean)分配给JSP页面使用;如果没有找到,就根据class指定的类创建一个名字是id的bean,并添加到pageContent对象中,同时将这个bean分配给JSP页面使用。useBean动作标记执行流程如图5.1所示。