jsp:useBean 动作
此动作用来生成一个 Bean 组件,并设定它的 id 号及使用范围。
<jsp:useBean
id="beanName"
scope="page|request|session|application"
class="package.class"
type="package.class"
beanName="{package.class|<%=expression%>}
type="package.class"">
action for bean
</jsp:useBean>Code language: HTML, XML (xml)
id="beanName":定义生成 Bean 组件的名字,不能重名且 scope 的值也最好一样,否则 JSP 引擎将认定最先被创建的那个。scope="page|request|session|application":定义 Bean 的活动范围,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 的调用 |
class="package.class":用 class 属性指定的类实例化一个 Bean,其中 package 名必须是类里用关键字 package 指定的。
如:<jsp:useBean id="name" class="package.class" />
这行代码的含义是:创建一个由 class 属性指定的类的实例,然后把它绑定到其名字由 id 属性给出的变量上。不过,就象我们接下来会看到的,定义一个 scope 属性可以让 Bean 关联到更多的页面。此时,jsp:useBean 动作只有在不存在同样 id 和 scope 的 Bean 时才创建新的对象实例,同时,获得现有 Bean 的引用就变得很有必要。
JavaBean 类示例
public class Student {
long classno;
String name;
int age;
Boolean sex;
public Student() {
classno = 12345;
name = "aaaa";
age = 21;
sex = true;
}
public long getClassno() {
return classno;
}
public void setClassno(long no) {
this.classno = no;
}
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 getSex() {
return sex;
}
public void setSex(Boolean sex) {
this.sex = sex;
}
}Code language: JavaScript (javascript)
JSP 页面中使用 JavaBean
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="student" scope="page" class="Student" />
<%=student.getName()%><br>
<% student.setName("wll"); %>
</body>
</html>Code language: HTML, XML (xml)
不同 scope 的行为说明
- scope=”page” 时,运行
testBean.jsp文件,name的初始值为aaaa。虽然在 JSP 文件中又重设为wll,但刷新后仍为aaaa。 - scope=”session” 时,运行
test.jsp文件,name的初始值为aaaa。虽然在 JSP 文件中又重设为wll,但刷新后仍为wll。只要不关闭此窗口,任何刷新或打开一个新窗口,都输出wll。直到关闭所有窗口,再运行testBean.jsp文件,输出才会为初始值aaaa。 - scope=”application” 时,运行
testBean.jsp文件,name的初始值为aaaa。虽然在 JSP 文件中又重设为wll,但刷新后仍为wll。只要不关闭此窗口,任何刷新或打开一个新窗口,都输出wll。即使关闭所有窗口,再运行testBean.jsp文件,输出仍为wll。除非关闭服务后又重启,再运行testBean.jsp文件,name的输出为初始值aaaa。 - scope=”request” 时,新建一文件
testBean1.jsp内容与testBean.jsp一样。先在浏览器中运行testBean.jsp文件,输出name的值为初始值aaaa。再在浏览器中运行testBean1.jsp文件,此时输出为wll,因为它们算是相同的 request。
Previous: JSP 动作
Next: jsp:setProperty 动作