j2ee四大作用域pagecontext,request,session,ServletContext(转)
转自:(http://www.5ycode.com/63)
在JSP页面中的对象,包括用户创建的对象(例如,JavaBean对象)和JSP的隐含对象,都有一个范围属性。范围定义了在什么时间内,在哪一个JSP页面中可以访问这些对象。例如session对象在会话期间内,可以在多个页面中被访问。application对象在整个Web应用程序的生命周期中都可以被访问。在JSP中,有4种范围,如下所示。
一,page范围–PageContext域
具有page范围的对象被绑定到javax.servlet.jsp.PageContext对象中。在这个范围内的对象,只能在创建对象的页面中访问。可以调用pageContext这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象(pageContext对象还提供了访问其他范围对象的getAttribute方法),pageContext对象本身也属于page范围。当Servlet类的_jspService()方法执行完毕,属于page范围的对象的引用将被丢弃。page范围内的对象,在客户端每次请求JSP页面时创建,在页面向客户端发送回响应或请求被转发(forward)到其他的资源后被删除。
二,request范围–Request域
具有request范围的对象被绑定到javax.servlet.ServletRequest对象中,可以调用request这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象。在调用forward()方法转向的页面或者调用include()方法包含的页面中,都可以访问这个范围内的对象。要注意的是,因为请求对象对于每一个客户请求都是不同的,所以对于每一个新的请求,都要重新创建和删除这个范围内的对象。
request对象的主要方法:
1、 getParameter(String name) return String //获取页面form表单中name属性为"name"的value值
2、 getParameterNames() return Enumeration //获取页面提交的所有的具有name属性的表单(包含button)
3、 getParameterValues(String name) return String[] //方法将获取所有form表单中name属性为"name"的值.该方法返回一个数组.
三,session范围–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
四,application范围–ServletContext域
具有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)
在web.xml中配置初始化参数
在<web-app>下配置
<context-param>
<param-name>yxkong</param-name>
<param-value>鱼翔空</param-value>
</context-param>
读取web.xml中的参数
ServletContext sc=this.getServletContext();
sc.getInitParameter("yxkong");
sc.getInitParameterNames();
下面我们通过几个简单的例子,来看一下这4种范围对象的应用。
1.测试page范围
test1.jsp
<%
pageContext.setAttribute("name","yxkong");
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: yxkong
test2.jsp: null
说明保存在pageContext对象中的属性具有page范围,只能在同一个页面中被访问。
2.测试request范围
修改test1.jsp和test2.jsp,如下所示。
test1.jsp
<%
request.setAttribute("name","yxkong");
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: yxkong
test2.jsp: yxkong
说明保存在request对象中的属性具有request范围,在请求对象存活期间,可以访问这个范围内的对象。
将pageContext.include("test2.jsp"); 这一句注释起来,先访问test1.jsp,再访test2.jsp,可以看到如下输出:
test2.jsp: null
这是因为客户端开始了一个新的请求。
3.测试session范围
修改test1.jsp和test2.jsp,如下所示。
test1.jsp
<%
session.setAttribute("name","yxkong");
%>
test2.jsp
<%
out.println("test2.jsp: ");
out.println(session.getAttribute("name"));
%>
先访问test1.jsp,然后在同一个浏览器窗口中访问test2.jsp,可以看到如下输出:
test2.jsp: yxkong
说明保存在session对象中的属性具有session范围,在会话期间,可以访问这个范围内的对象。
如果我们在访问完test1.jsp后,关闭浏览器,重新打开浏览器窗口,访问test2.jsp,将看到如下输出:
test2.jsp: null
这是因为客户端与服务器开始了一次新的会话。
4.测试application范围
修改test1.jsp和test2.jsp,如下所示。
test1.jsp
<%
application.setAttribute("name","yxkong");
%>
test2.jsp
<%
out.println("test2.jsp: ");
out.println(application.getAttribute("name"));
%>
先访问test1.jsp,然后关闭浏览器,再打开浏览器窗口,访问test2.jsp,可以看到如下输出:
test2.jsp: yxkong
说明保存在application对象中的属性具有application范围,在Web应用程序运行期间,都可以访问这个范围内的对象。
j2ee四大作用域pagecontext,request,session,ServletContext(转)的更多相关文章
- 域对象 pageContext request session servletContext
pageContext 当前页面之内有效 request 当前的请求内有效 session 当前的会话内有效 servletContext 当前这次服务器生命周期内有效
- Web---session技术代码演示(request,session,servletContext)
Session会话简介与基本知识点 当浏览器第一次访问服务器时,无论先访问哪一个页面,服务器就会给用户分配一个唯一的会话标识,即jsessionid然后以cookie的形式返回给用户. 会话是指在一段 ...
- JavaWeb -pageContext/request/session/application
pageContext/request/session/application总结 一.范围差异 1. pageContext jsp页面容器 当前页面有效 2. request 请求对象 同一次请求 ...
- java web作用域page request session application
转载自:http://blog.csdn.net/wyd458549392147/article/details/6944481 1.page指当前页面.只在一个jsp页面里有效 . 2.reques ...
- JSP内置对象--4种属性范围 (pageContext,request,session,application)
pageContext: javax.servlet.jsp.JspContext抽象类的父类JspContext 中有以下方法. request:javax.servlet.http.的接口Http ...
- [原创]java WEB学习笔记15:域对象的属性操作(pageContext,request,session,application) 及 请求的重定向和转发
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- jsp四大作用域之request
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- servlet三大作用域:request,session,application
javaweb开发中Servlet三大域对象的应用(request.session.application(ServletContext)). 1. request request是表示一个请求,只要 ...
- 【转载】servlet三大作用域:request,session,application
javaweb开发中Servlet三大域对象的应用(request.session.application(ServletContext)). 1. requestrequest是表示一个请求,只要发 ...
随机推荐
- Radar之字节流加载图片
获取GUITexture GameObject _obj = GameObject.Find("Tex1"); GUITexture _tex = _obj.GetComponen ...
- SQL与C#结合完整修改 删除信息
--SQl中--建立ren的数据库,插入一条信息 create database ren go use ren go create table xinxi ( code ) primary key,- ...
- 【Linux】用grep在文档中查找内容
有时候,我们需要在文档中查找一些内容,常用grep.它在文档查找相关内容并输出匹配行. > 查找某关键字 在system.log中,查找包含keyword的行 grep 'keyword' sy ...
- Linux Shell脚本面试25问
Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件( ...
- MATLAB模拟布丰投针实验
MATLAB模拟布丰投针实验 标签(空格分隔): 算法 Buffon's Needle 桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < ...
- [原创]AM3352 + TPS65910 调试方法+调试记录
时间:20160912 一.电源时序排查 1.保证正确的上电时序,一般都会在CPU数据手册中提到.通常不会规定具体的上电先后时间的要求,多数情况下会要求前一个电平上升到90%满幅度之后才可以有下一个电 ...
- C语言程序设计现代方法_数组(第八章)
C语言不要求检查下标的范围.当下标超出范围时,程序可能会执行不可预知的行为. 看下这个程序: #include <stdio.h> #define N 10 // int main() { ...
- 常见的PC端和移动端表单组件
http://files.cnblogs.com/samwu/PC%E7%AB%AF%E5%89%8D%E7%AB%AF%E4%BA%A4%E4%BA%92%E7%BB%84%E4%BB%B6.rar
- Python跳过第一行读取文件内容
Python编程时,经常需要跳过第一行读取文件内容.比较容易想到是为每行设置一个line_num,然后判断line_num是否为1,如果不等于1,则进行读取操作.相应的Python代码如下: inpu ...
- scala的传名参数
scala如果你想实现像if ,while等类似的控制结构,根本没有值要传入花括号{}直接的代码里.要怎么实现. 比如说,我们要实现一个断言的控制结构,myAssert(), myAssert函数参考 ...