useBean 动作

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 为它设定的范围有:

范围说明
pageBean 的缺省使用范围
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。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注