一、jsp:useBean
1)通过jsp:useBean,可以在JSP中使用在别的java文件中定义好的Bean。
2)jsp要求Bean应该在一个包中,而不能是裸体类。
2)Bean的基本要素:
①必须要有一个不带参数的构造器,在JSP元素创建Bean时会调用空构造器。
②Bean类应该没有任何公共实例变量(都是private的),也就是说,不允许直接访问实例变量,变量名称首字母
必须小写。
③通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写。
3)基本用法,举例说明:
在TestJSP项目的src目录下新建一个包com.hpe.bean,在包下新建CounterBean.java如下所示:
可以看出这个Bean实现了Serializable接口,也就是说CounterBean对象可以被java.io.ObjectInputStream写入、被java.io.ObjectOutputStream写出。
写一个TestBean.jsp如下所示:
这种写法相当于下面这样:
也就是说class属性指定了类的位置,id属性指定了对象名(引用名)。
jsp:useBean有一个属性scope,scope="page|request|session|application"
scope默认为page,即由jsp:useBean生成的Bean对象默认是一个局部变量,用户请求一个jsp页面,服务器就调用其service方法生成一个Bean对象,当service方法结束,该变量也就随之消失。
jsp:useBean有一个属性type,即指定生成的Bean对象的类型,如:
相当于下面这种写法:
即父类用指向子类对象,type默认为class所指定的类的类型。
下面在CounterBean.jsp中加入对Bean对象方法的调用:
访问:http://localhost:8080/TestJSP/TestBean.jsp,多次访问后,统计数依然为1:
这是由于Bean对象的type属性默认值为page,因此生成的Bean对象是局部变量。
除了直接调用使用set方法来获取Bean对象的私有成员变量的值,也可以通过jsp:setProperty来设置指定对象的属性。
可以使用jsp:getProperty来设置指定对象的属性,如下所示:
页面效果:
总结:
jsp:useBean各项参数含义:
①id:对象实例名称。
②class:包名.Bean类名
③scope:Bean作用的范围,默认为page,对仅在当前jsp页面有效。
1)通过jsp:useBean,可以在JSP中使用在别的java文件中定义好的Bean。
2)jsp要求Bean应该在一个包中,而不能是裸体类。
2)Bean的基本要素:
①必须要有一个不带参数的构造器,在JSP元素创建Bean时会调用空构造器。
②Bean类应该没有任何公共实例变量(都是private的),也就是说,不允许直接访问实例变量,变量名称首字母
必须小写。
③通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写。
3)基本用法,举例说明:
在TestJSP项目的src目录下新建一个包com.hpe.bean,在包下新建CounterBean.java如下所示:
package com.hpe.bean;
import java.io.Serializable;
public class CounterBean implements Serializable {
private int count = 0;
public CounterBean() {
}
public int getCount() {
return ++count;
}
public void setCount(int count) {
this.count = count;
}
}
可以看出这个Bean实现了Serializable接口,也就是说CounterBean对象可以被java.io.ObjectInputStream写入、被java.io.ObjectOutputStream写出。
写一个TestBean.jsp如下所示:
<jsp:useBean id="cb" class="com.hpe.bean.CounterBean">
</jsp:useBean>
这种写法相当于下面这样:
<%@ page import="com.hpe.bean.CounterBean" %>
<% CounterBean cb = new CounterBean(); %>
也就是说class属性指定了类的位置,id属性指定了对象名(引用名)。
jsp:useBean有一个属性scope,scope="page|request|session|application"
scope默认为page,即由jsp:useBean生成的Bean对象默认是一个局部变量,用户请求一个jsp页面,服务器就调用其service方法生成一个Bean对象,当service方法结束,该变量也就随之消失。
jsp:useBean有一个属性type,即指定生成的Bean对象的类型,如:
<jsp:useBean id="cb" class="com.hpe.bean.CounterBean" type="java.lang.Object">
</jsp:useBean>
相当于下面这种写法:
<%@ page import="com.hpe.bean.CounterBean" %>
<% Object cb2 = new CounterBean(); %>
即父类用指向子类对象,type默认为class所指定的类的类型。
下面在CounterBean.jsp中加入对Bean对象方法的调用:
<jsp:useBean id="cb" class="com.hpe.bean.CounterBean">
</jsp:useBean>
<%= cb.getCount() %>
访问:http://localhost:8080/TestJSP/TestBean.jsp,多次访问后,统计数依然为1:
这是由于Bean对象的type属性默认值为page,因此生成的Bean对象是局部变量。
除了直接调用使用set方法来获取Bean对象的私有成员变量的值,也可以通过jsp:setProperty来设置指定对象的属性。
可以使用jsp:getProperty来设置指定对象的属性,如下所示:
<jsp:useBean id="cb" class="com.hpe.bean.CounterBean">
</jsp:useBean>
<jsp:setProperty name="cb" property="count" value="100" />
<%-- 相当于
<% cd.setCount(100); %>
--%>
<jsp:getProperty name="cb" property="count" />
<%-- 相当于
<%= cb.getCount() %>
--%>
页面效果:
总结:
jsp:useBean各项参数含义:
①id:对象实例名称。
②class:包名.Bean类名
③scope:Bean作用的范围,默认为page,对仅在当前jsp页面有效。
④type:Bean实例类型,可以是本类,或其父类,或实现的接口,默认为本类。