• JSP教程:1天玩转JSP网站开发技术
  • JSP是什么?
  • JSP的特点与工作流程
  • JSP与ASP、PHP的比较
  • JSP页面的组成及其元素
  • JSP开发环境搭建(Tomcat的安装和配置)
  • 第一个JSP程序
  • JSP注释(多种注释详解)
  • JSP声明:变量、方法和类的声明
  • JSP中嵌入Java代码
  • JSP表达式
  • JSP开发模式(四种模式)
  • JSP常见错误以及解决方案
  • JSP指令详解(三大指令)
  • JSP page指令
  • JSP include指令
  • JSP指令应用实例
  • JSP动作
  • JSP include动作
  • JSP param动作
  • JSP forward动作
  • JSP plugin动作
  • JSP useBean动作
  • JSP setProperty动作
  • JSP getProperty动作
  • JSP application 对象
  • JSP out对象:向客户端输出数据
  • JSP request对象:获取客户端的请求信息
  • JSP response对象:响应客户端的请求并向客户端输出信息
  • JSP session对象
  • JSP pageContext对象
  • JSP page对象
  • JSP config对象
  • JSP获取并显示字符串长度
  • 什么是JavaBean?
  • JavaBean工具
  • JavaBean规范
  • JavaBean的属性(Simple、Indexed、Bound、Constrained)
  • JavaBean的Scope属性
  • JavaBean事件
  • JavaBean实现用户登录界面
  • Servlet是什么?
  • Servlet的生命周期
  • Servlet的类和方法
  • Servlet客户端跳转
  • EL是什么?(详解)
  • JSP EL表达式的基本语法及运算符的优先级(一览表)
  • JSP EL 点(.)运算符和下标([])运算符
  • JSP EL算数运算符
  • JSP EL关系运算符
  • JSP EL逻辑运算符
  • JSP EL条件运算符
  • JSP EL empty空运算符
  • EL表达式中的常量与变量
  • EL表达式的保留字
  • EL表达式的内置对象及其作用域
  • 使用EL表达式访问JavaBean
  • 使用EL表达式访问集合
  • EL表达式内置对象param和paramValues
  • EL表达式内置对象cookie
  • EL表达式内置对象initParam
  • JDBC 的定义及产品组件
  • 建立JDBC连接
  • 利用JDBC发送SQL语句
  • JDBC API ResultSet接口(记录集接口)
  • JDBC RowSet接口
  • JDBC BaseRowSet类和CachedRowSet类
  • 填充CachedRowSet对象记录集(三种方法)
  • File类(在JSP中的使用)详解
  • 使用字节流读/写文件
  • RandomAccessFile类
  • JSP文件上传
  • XML是什么?
  • XML的基本语法
  • JDK 中的 XML API
  • DOM解析XML
  • SAX解析XML
  • DOM4j解析XML
  • 对于 JSP 程序而言,使用 JavaBean 组件不仅可以封装许多信息,而且还可以将一些数据处理的逻辑隐藏到 JavaBeah 的内部。除此之外,我们还可以设定 JavaBean 的 Scope 属性,使得 JavaBean 组件对于不同的任务具有不同的生命周期和不同的使用范围。

    在前面我们己经提到过 Scope 属性具有四个可能的值,分别是 application、session、request、page,分别代表 JavaBean 的四种不同的生命周期和四种不同的使用范围。bean 只有在它定义的范围里才能使用,在它的活动范围外将无法访问。

    JSP 设定的范围如下:

    1. page:bean的默认使用范围。
    2. request:作用于任何相同请求的 JSP 文件中,直到页面执行完毕向客户端发回响应或在此之前已通过某种方式(如重定向、链接等方式)转到另一个文件为止。还可通过使用 Request 对象访问 bean,如 request.getAttribute(beanName)。
    3. session:作用于 session 的整个生存周期,在 session 的生存周期内,对此 bean 属性的任何改动,都会影响在此 session 内的另一 page、另一 request 里对此 bean 的调用。但必须在创建此 bean 的文件里事先用 page 指令指定了 session=true。
    4. application:作用于 application 的整个生存周期,在 application 的生存周期内,对此 bean 属性的任何改动,都会影响到此 application 内另一 page、另一 request 以及另一 session 里对此 bean 的调用。

    下面我们用一个最为简单的例子来理解。

    【例1】利用 JavaBean 获取当前时间,其代码如下:

    1. package example;
    2. import java.util.Date;
    3. import java.text.*;
    4. public class Common
    5. {
    6. Date d=new Date();
    7. public String now(String s)
    8. {
    9. SimpleDateFormat formatter=new SimpleDateFormat(s);
    10. return formatter.format(d);
    11. }
    12. }

    测试页面的代码如下:

    1. <jsp:useBean scope="page" id="dt" class="example.Common"/>
    2. <%
    3. out.print(dt.now("yyyy-MM-dd HH:mm:ss"));
    4. %>

    程序的运行结果如图 1 所示。

    显示当前时间
    图1 显示当前时间

    通过上述程序,我们可以得知:

    • 当 scope=application 时,我们浏览 date.jsp,这时显示出了系统时间。可是不管我们怎么刷新,重新打开一次浏览器,甚至换台机器,它显示的时间始终不变,都是当初的时间(即 bean 刚创建时得到的系统时间),因为 scope=application,所以 bean 的实例在内存中只有一份,此时只要不重新启动Web服务,输出不会变化。
    • 当 scopp=session 时,浏览 date.jsp,刷新时显示也不会变化。可是当我们重新打开浏览器,即一个新的 session 时,系统便再次创建 bean 的实例,取得当前系统时间,这时将得到正确的时间。同样,再次刷新新打开的页面(新的 session),显示也不会变化。
    • 当 scope=page/request(它们的区别只在于包含静态文件时,此处无区别)时,不断刷新页面将不断得到当前系统时间。

    以上可以看出对于不同的 scope,bean 有不同的作用域。使用时一定注意,不要将经常变动的 bean 的 scope 设为 application 或 session,那将得到不正确的结果。