page request session application 范围

在JSP页面中的对象,包括用户创建的对象(例如,JavaBean对象)和JSP的隐含对象,都有一个范围属性。范围定义了在什么时间内,

在哪一个JSP页面中可以访问这些对象。例如,session对象在会话期间内,可以在多个页面中被访问。application对象在整个Web应

用程序的生命周期中都可以被访问。在JSP中,有4种范围,如下所示。

1. page范围

具有page范围的对象被绑定到javax.servlet.jsp.PageContext对象中。在这个范围内的对象,只能在创建对象的页面中访问。可以调

用pageContext这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象(pageContext对象还提供了访问其他范围对象的

getAttribute方法),pageContext对象本身也属于page范围。当Servlet类的_jspService()方法执行完毕,属于page范围的对象的

引用将被丢弃。page范围内的对象,在客户端每次请求JSP页面时创建,在页面向客户端发送回响应或请求被转发(forward)到其

他的资源后被删除。

2. request范围

具有request范围的对象被绑定到javax.servlet.ServletRequest对象中,可以调用request这个隐含对象的getAttribute()方法来访问

具有这种范围类型的对象。在调用forward()方法转向的页面或者调用include()方法包含的页面中,都可以访问这个范围内的对象。

要注意的是,因为请求对象对于每一个客户请求都是不同的,所以对于每一个新的请求,都要重新创建和删除这个范围内的对象。

request对象的主要方法:

1、 getParameter(String name) return String

2、 getParameterNames() return Enumeration

3、 getParameterValues(String name) return String[]

3.session范围

具有session范围的对象被绑定到javax.servlet.http.HttpSession对象中,可以调用session这个隐含对象的getAttribute()方法来访问

具有这种范围类型的对象。JSP容器为每一次会话,创建一个HttpSession对象,在会话期间,可以访问session范围内的对象。

Session对象的主要方法:

1、 getAttribute(String name) return Object

2、 getAttributeNames() return Enumeration

3、 getCreationTime() return long

4、 getId() return String

5、 GetLastAccessedTime() return long

6、 GetMaxInactiveInterval() return int

7、 RemoveAttribute(String name) void

8、 SetAttribute(String name , java.lang.Object value) void

4.application范围

具有application范围的对象被绑定到javax.servlet.ServletContext中,可以调用application这个隐含对象的getAttribute()方法来访问

具有这种范围类型的对象。在Web应用程序运行期间,所有的页面都可以访问在这个范围内的对象。

application对象的主要方法:

1、 getAttribute(String name) return Object

2、 getAttributeNames() return Enumeration

3、 getInitParameter(String name)

4、 getServletInfo()

5、 setAttribute(String name , Object object)

下面我们通过几个简单的例子,来看一下这4种范围对象的应用。

1.测试page范围

test1.jsp

<%
pageContext.setAttribute("name","zhangsan");
out.println("test1.jsp: ");
out.println(pageContext.getAttribute("name"));
out.println("<p>");
pageContext.include("test2.jsp");
%>

test2.jsp

<%
out.println("test2.jsp: ");
out.println(pageContext.getAttribute("name"));
%>

访问test1.jsp,将看到如下的输出:

test1.jsp: zhangsan

test2.jsp: null

说明保存在pageContext对象中的属性具有page范围,只能在同一个页面中被访问。

2.测试request范围

修改test1.jsp和test2.jsp,如下所示。

test1.jsp

<%
request.setAttribute("name","zhangsan");
out.println("test1.jsp: ");
out.println(request.getAttribute("name"));
out.println("<p>");
pageContext.include("test2.jsp");
%>

test2.jsp

<%
out.println("test2.jsp: ");
out.println(request.getAttribute("name"));
%>

访问test1.jsp,将看到如下的输出:

test1.jsp: zhangsan
test2.jsp: zhangsan

说明保存在request对象中的属性具有request范围,在请求对象存活期间,可以访问这个范围内的对象。

将pageContext.include("test2.jsp"); 这一句注释起来,先访问test1.jsp,再访test2.jsp,可以看到如下输出:

test2.jsp: null

这是因为客户端开始了一个新的请求。

3.测试session范围

修改test1.jsp和test2.jsp,如下所示。

test1.jsp

<%
session.setAttribute("name","zhangsan");
%>

test2.jsp

<%
out.println("test2.jsp: ");
out.println(session.getAttribute("name"));
%>

先访问test1.jsp,然后在同一个浏览器窗口中访问test2.jsp,可以看到如下输出:

test2.jsp: zhangsan

说明保存在session对象中的属性具有session范围,在会话期间,可以访问这个范围内的对象。

如果我们在访问完test1.jsp后,关闭浏览器,重新打开浏览器窗口,访问test2.jsp,将看到如下输出:

test2.jsp: null

这是因为客户端与服务器开始了一次新的会话。

4.测试application范围

修改test1.jsp和test2.jsp,如下所示。

test1.jsp

<%
application.setAttribute("name","zhangsan");
%>

test2.jsp

<%
out.println("test2.jsp: ");
out.println(application.getAttribute("name"));
%>

先访问test1.jsp,然后关闭浏览器,再打开浏览器窗口,访问test2.jsp,可以看到如下输出:

test2.jsp: zhangsan

说明保存在application对象中的属性具有application范围,在Web应用程序运行期间,都可以访问这个范围内的对象。

时间: 2024-08-05 10:59:54

page request session application 范围的相关文章

page,request,session,application四个域对象的使用及区别

转自:page,request,session,application四个域对象的使用及区别 1.page指当前页面.只在一个jsp页面里有效 .2.request 指从http请求到服务器处理结束,返回响应的整个过程.在这个过程中使用forward方式跳转多个jsp.在这些页面里你都可以使用这个变量. 3.Session 有效范围当前会话,从浏览器打开到浏览器关闭这个过程. 4.application它的有效范围是整个应用. 作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一

Struts2里如何取得request,session,application

第一种:取得MAP类型的request,session,application在java文件里写 package com.xjtu.st; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private Map reques

request, session, application辨析(待更新)

作用域 request < session < application 分析 1. request 只在一次请求中有效,当请求发送变化时,信息将失效. 2. session 在当前一次会话中有效,即当同一个浏览器多次访问时,在这多次访问中传递信息,就是session的作用. session失效: session过期 服务器调用invalidate() 通过<%@ page session="false" %>(不推荐使用) 3. application 在一次服

Strut2 ognl取出存放在request,session,application和对象栈的中的值

1.取出request,session,applicaiton中的值 a.往里面加入request,session,application中加入值 public String testServlet(){ ServletActionContext.getRequest().setAttribute("request_username", "username"); ActionContext.getContext().getSession().put("se

暑期项目经验(九) -- request session application

request.session.application 一.基础知识 可以看看  浅谈:request,session,application(http://blog.csdn.net/hzc543806053/article/details/7416007) 要点: 作用域: request<session<application 共同方法:都可以使用 setAttribute(String name , Object o ) ,getAttribute(String name) 二.在ja

struct2访问或添加request/session/application

访问或添加request/session/application1 通过ActionContext//这样放置public String execute(){ActionContext ctx = ActionContext.getContext();ctx.getApplication().put("app","lll");ctx.getSession().put("ses","session范围");ctx.put(&qu

struts2 action中获取request session application的方法

共四种方式: 其中前两种得到的是Map<String,Object>  后两种得到的才是真正的request对象 而Map就是把request对象中的属性取出做成了键值对而已. [方法一] public class LoginAction { private Map request; private Map session; private Map application; public String execute() { request = (Map)ActionContext.getCo

对request,session,application作用域形象理解

看到一篇比较有意思的文章,分享一下.原网址:http://blog.csdn.net/rushkid02/article/details/8063792 几乎所有的Web开发语言都支持Session功能,Servlet也不例外. Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的. 作用域分为四种,分别为: page 在当前页面有效(仅用于JSP中)  request 在当前请求中有效  session 在当前会话中有效  application 在所有应用程

[原创]java WEB学习笔记15:域对象的属性操作(pageContext,request,session,application) 及 请求的重定向和转发

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------