java pagescope_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的调用。

下面我们用一个最为简单的例子来搞明白它了。

例子很简单,Bean的功能为取当前时间,其代码为Common.java,其源程序如下:

package example3;

import java.util.Date;

import java.text.*;

public class Common

{

Date d=new Date();

public String now(String s)

{

SimpleDateFormat formatter = newSimpleDateFormat(s);

return formatter.format(d);

}

}

测试页面的代码为:

date.jsp

out.print(dt.now("yyyy-mm-dd"));

%>

输出结果:

总结:

1、当scope=application时,我们浏览date.jsp,这时显示出了系统时间。可是不管我们怎么刷新,重新打开一次浏览器,甚至换台机器,它显示的时间始终不变,都是当初的时间(即bean刚创建时得到的系统时间),因为scope=application,所以Bean的实例在内存中只有一份,此时只要不重新启动WEB服务,输出不会变化。

2、当scope=session时,浏览date.jsp,刷新时显示也不会变化。可是当我们重新打开一浏览器,即一个新的session,系统便再次创建Bean的实例,取得当前系统时间,这时将得到正确的时间。同样,再次刷新新打开的页面(新的session),显示也不会变化。

3、当scope=page/request(它们的区别只在于包含静态文件时,此处无区别)时,不断刷新页面将不断得到当前系统时间。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JSP中,pageContext对象提供了多个作用域来存储不同范围的数据,包括PAGE_SCOPE和REQUEST_SCOPEPAGE_SCOPE用于存储在当前页面内部共享的数据,而REQUEST_SCOPE用于存储在请求期间共享的数据。 以下是一个简单的示例,用于验证PAGE_SCOPE和REQUEST_SCOPE之间的差异: index.jsp: ``` <%@ page contentType="text/html;charset=UTF-8" %> <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP Scope Example</title> </head> <body> <h1>JSP Scope Example</h1> <% // 在PAGE_SCOPE中存储数据 pageContext.setAttribute("pageData", "This data is in PAGE_SCOPE.", PageContext.PAGE_SCOPE); // 在REQUEST_SCOPE中存储数据 pageContext.setAttribute("requestData", "This data is in REQUEST_SCOPE.", PageContext.REQUEST_SCOPE); %> <p> <a href="./pageScope.jsp">View PAGE_SCOPE Data</a><br> <a href="./requestScope.jsp">View REQUEST_SCOPE Data</a> </p> </body> </html> ``` pageScope.jsp: ``` <%@ page contentType="text/html;charset=UTF-8" %> <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP Page Scope Example</title> </head> <body> <h1>JSP Page Scope Example</h1> <% // 从PAGE_SCOPE中获取数据 String pageData = (String)pageContext.getAttribute("pageData", PageContext.PAGE_SCOPE); // 输出PAGE_SCOPE中的数据 out.println("<p>" + pageData + "</p>"); %> </body> </html> ``` requestScope.jsp: ``` <%@ page contentType="text/html;charset=UTF-8" %> <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP Request Scope Example</title> </head> <body> <h1>JSP Request Scope Example</h1> <% // 从REQUEST_SCOPE中获取数据 String requestData = (String)pageContext.getAttribute("requestData", PageContext.REQUEST_SCOPE); // 输出REQUEST_SCOPE中的数据 out.println("<p>" + requestData + "</p>"); %> </body> </html> ``` 当我们访问index.jsp页面时,会在PAGE_SCOPE和REQUEST_SCOPE中存储数据,并提供两个链接,分别指向pageScope.jsp和requestScope.jsp页面。 当我们点击“View PAGE_SCOPE Data”链接时,会跳转到pageScope.jsp页面,并从PAGE_SCOPE中获取数据,并将其输出到页面上。 当我们点击“View REQUEST_SCOPE Data”链接时,会跳转到requestScope.jsp页面,并从REQUEST_SCOPE中获取数据,并将其输出到页面上。 通过这个例子,我们可以看到PAGE_SCOPE和REQUEST_SCOPE之间的不同之处。PAGE_SCOPE中存储的数据只在当前页面内部共享,而REQUEST_SCOPE中存储的数据在整个请求期间都是可用的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值