四大范围对比

为了更方便的了解四大内置对象的具体范围,我设计了一个简单的jsp页面,通过逐个甩掉页面中的值来确定范围

1、这个页面可以获取所有给内置对象设置的值

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<h1>a.jsp</h1>
<% 
	pageContext.setAttribute("a", "页面范围");
	request.setAttribute("a", "请求范围");
	session.setAttribute("a", "回话范围");
	application.setAttribute("a", "应用范围");
%>

<%=pageContext.getAttribute("a")  %><br />
<%=request.getAttribute("a")  %><br />
<%=session.getAttribute("a")  %><br />
<%=application.getAttribute("a") %><br />
这是页面展示


2、之后再页面加入另一行代码:这个代码的主要功能是转发,转发的特点是页面请求只有一次,服务器会自己找到需要的页面

<jsp:forward page="b.jsp"></jsp:forward>
结果展示:


结果分析:通过这个页面可以发现,第一个pageContext也就是页面范围已经没有数据了其他数据还在,因此可以得出结论,页面范围只要出了定义数据的那个页面,数据就不会存在。

3、b.jsp中有一行代码,作用是超链接

<a href="c.jsp">c.jsp</a>

结果展示:


结果分析:通过这个页面发现请求范围没了

原因分析:request请求范围只有在同一请求中才可以使用,而不管是使用超链接还是重定向都属于第二次请求,因此请求范围没了

3、关闭所有页面(会话),重新打开浏览器,输入最后的网址

结果展示:


结果分析:会话范围,在jsp中特指从打开网站的第一个页面开始,到关闭网站的所有页面为止,为一次会话范围,因此当关闭所有页面再直接打开获取页面的时候会话范围没有了,因为上一次会话已经结束了,这次会话还没有给它设置值

4、重启服务器,重新部署web应用

结果展示:


结果分析:应用范围存在于这个web应用中,只要你这个服务没有重启过,它就会一直存在

jsp中四大范围分析,由小到大依次是:pageContext < request < session < application

通过上面例子我们可以发现,除了pageContext以外,其他3个范围都可以在不同页面之间传递数据,那么应该如何选择呢?

原则是:能用小范围,就不要用大范围。

理由:因为小范围内的数据,占用内存的时间少, 要知道,request sessionapplication都是由web服务器创建的,占用的都是web服务器的内存,当a.jsp把参数传递给b.jsp以后,内存就应该释放。



















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值