JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 的属性。
符合下面设计规则的任何Java类都是一个JavaBean
(1) 对于数据类型"protype"的每个可读属性,bean必须有下面签名的一个方法:public proptype getProperty(){}
(2) 对于数据类型"protype"的每个可写属性,bean必须有下面签名的一个方法:public setProperty(proptype x){}
(3)定义一个不带任何参数的构造函数
JavaBean的Scope属性
对于JSP 程序而言,使用JavaBeans 组件不仅可以封装许多信息,而且还可以将一些数据处理的逻辑隐藏到JavaBeans 的内部,除此之外,我们还可以设定JavaBeans 的Scope属性,使得JavaBeans 组件对于不同的任务具有不同的生命周期和不同的使用范围。Scope属性具有四个可能的值分别是application 、session 、request、page分别代表JavaBeans 的四种不同的生命周期和四种不同的使用范围。bean只有在它定义的范围里才能使用,在它的活动范围外将无法访问到它。JSP为它设定的范围有:
page: bean的缺省使用范围
request:作用于任何相同请求的JSP文件中,直到页面执行完毕向客户端发回响应或在此这之前已通过某种方式(如重定向、链接等方式)转到另一个文件为止。
还可通过使用 Request对象访问bean,如request.getAttribute(beanName)
session:作用于整个session的生存周期内,在session的生存周期内,对此bean属性的任何改动,都会影响到在此session内的另一page、另一request里对此bean的调用。但必须在创建此bean的文件里事先用page指令指定了session=true。
application:作用于整个application的生存周期内,在application周期内,对此bean属性的任何改动,都会影响到此application内另一page、另一request以及另一session里对此bean的调用。
例1:
Student.java
package com.jsp; public class Student { private long classno; private String name; private int age; private boolean sex; private String major; public Student(){ } public long getClassno() { return classno; } public void setClassno(long classno) { this.classno = classno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isSex() { return sex; } public void setSex(boolean sex) { this.sex = sex; } public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } }
测试代码 input.html
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JavaBean测试</title> </head> <body bgcolor = "#FFFFFF"> <jsp:useBean id="student1" scope = "page" class = "com.jsp.Student"/> 利用标记获取JavaBean属性: <jsp:getProperty name = "student1" property = "name"/> <br> 利用对象方法获取JavaBean属性: <%=student1.getName()%> <br> 利用标记设置JavaBean属性name为temp <jsp:setProperty name = "student1" property="name" value = "小明"/> <br> 获取新的属性: <jsp:getProperty name = "student1" property = "name"/> <br> </body> </html>
例2:
第一部分同例1的Student.java
input.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Param HTML</title> </head> <body> <form action ="param.jsp"> 姓名:<input type = "text" name ="Username"><br> 年龄:<input type = "text" name = "age"><br> 专业:<input type = "text" name = "major"><br> <input type ="submit" value="提交"> </form> </body> </html>
param.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%request.setCharacterEncoding("gb2312");%> <html> <head> <title>利用请求参数设置JavaBean属性</title> </head> <body bgcolor="#ffffff"> <jsp:useBean id = "student2" scope="page" class="com.jsp.Student"/> <jsp:setProperty name="student2" property="name" param="UserName"/> <!-- 注意第三个参数名为param,因为上一个页面传过来的为参数 如果为valule="UserName" 那么名字就会被设置为"UserName"而不是参数值 --> <jsp:setProperty name="student2" property="age" param="age"/> <jsp:setProperty name="student2" property="major" param="major"/> <tr> <td>姓名</td> <td><jsp:getProperty name = "student2" property="name"/></td> </tr> <tr> <td>年龄</td> <td><jsp:getProperty name = "student2" property="age"/></td> </tr> <tr> <td>专业</td> <td><jsp:getProperty name = "student2" property="major"/></td> </tr> </body> </html>