四大范围对比

来源:互联网 发布:linux怎么新建文件 编辑:程序博客网 时间:2024/06/06 02:41

为了更方便的了解四大内置对象的具体范围,我设计了一个简单的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以后,内存就应该释放。



















原创粉丝点击