JSP —— scope取值page、request、session、application

一、JSP Scope

scope(范围)即JSP 中变量或对象的作用域,有四个取值:page、request、session、application,这四个取值范围是从小到大排列的。

page:当前访问的页面内有效,关闭页面重新打开或刷新后变量或对象重置;

request:变量或对象存在于一次完整HTTP 请求与响应期间,完成后被释放。所以在forward跳转的几个页面内都有效,但sendRedirect方式跳转所返回的页面内无效,因为这种方式是完整的两次HTTP 请求与响应(A.jsp请求—>B(使用sendRedirect("../C.jsp")—>响应A.jsp后请求C.jsp—>C.jsp—>响应A.jsp,那么在A.jsp中范围为request的变量在返回的C.jsp中将不可用)。(说明:include指令是静态包含,所以包含jsp页面时融合为一个整体)

session:会话期间。

application:服务启动期间。


二、设置JavaBean的scope

使用JavaBean时可指定该JavaBean的作用范围,取上面4个值之一,默认page。

<jsp:useBean id="xiaXia" class="com.myBeans.Family" scope="application" />
或
<jsp:useBean id="xiaXia" class="com.myBeans.Family" scope="application" >
        <jsp:setProperty>等标签
</jsp:useBean>


三、理解scope

1、scope是用于设置JavaBean 的,但为什么说成是JSP Scope?

scope确实只是设置JavaBean,但却是体现了JSP 中的所有变量与对象的作用域的划分。如request、application等都有setAttribute方法,因为request是存在于一次完成HTTP 请求的,所以设置的属性的作用域也就是request,对application设置的属性则为application。除了JavaBean真正存在scope属性外,其他的对象或属性是没有表明scope的,也没必要,如Request对象本就表明了它的作用域为一次完整请求期间。具体看第2条。

2、逆向理解scope

将JavaBean的scope属性设置为某个值,就确定了该JavaBean的作用域,反之,将变量(对象也是变量)存储在哪个JSP 内置对象中,那它的scope(实际不存在,只是概念)也就确定了。具体:

——>变量存入application,则作用域为"application",因为application对象是单例的,所以存储的变量对所有用户是公共的;

——>变量存入session,则作用域为"session";

——>变量存入request,则作用域为"request";

——>变量存入pageContext,则作用域为"page";


四、举例

参考:JSP 的四个作用域

一个网站MyWebSite,其包含7个jsp页面,分别为master.jsp、top.jsp、main.jsp、foot.jsp、login.jsp、success.jsp和news.jsp。master.jsp页面通过<include>指令包含top.jsp、main.jsp、foot.jsp三个页面,当用户通过login.jsp登录成功后,进入success.jsp页面然后通过此页面的<forward>标签跳转到master.jsp页面中。

我们在success.jsp页面中加入如下代码(此处用到jstl标签) 

<c:set value="aaa" var="test1" scope=”page” />
<c:set value="aaa" var="test2" scope=”request” />
<c:set value="aaa" var="test3" scope=”session” />
<c:set value="aaa" var="test4" scope=”application” />

<jsp:forward page=”master.jsp”/ >这里一一说明

1.变量 test1 只在success.jsp内有效;
2.变量 test2  在success.jsp、master.jsp、top.jsp、main.jsp、foot.jsp中有效;
3.变量 test3 在7个页面中都有效(包括login.jsp和news.jsp);
4.变量 test4 在整个网站,当前也就是7个页面中都有效(包括login.jsp和news.jsp)。

Test3和test4有效范围一样,有什么区别呢?

其实区别蛮大的,我只说明一点,假如此时又有另一个用户访问master.jsp页面,那么test3相对于这个用户来说就无效,而test4却是有效的。或者当第一个登录的用户关闭浏览器后,再重新访问master.jsp时,test3就无效,而test4却有效。


  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值