JSP 属性范围
参考文献:http://www.cnblogs.com/xdp-gacl/p/3781056.html
一、属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围。
JSP中提供了四种属性范围:
- pageContext,当前页,一个属性只能在一个页面中取得,跳转到其他页面无法取得
- request,一个页面中设置的属性在经过了服务器跳转后的页面可以继续取得。
- session,一个用户设置的内容,只要是与此用户相关的页面都可以访问
- application,在整个服务器上设置的属性,所有人都可以访问
二、属性操作方法
四种属性范围中都包含以下的属性操作方法:
|
No. |
方法 |
描述 |
|
1 |
public void setAttribute(String name,Object value) |
设置属性 |
|
2 |
public object getAttribute(String name) |
取得属性 |
|
3 |
public void removeAttribute(String name) |
删除属性 |
三、具体四种属性范围
- pageContext,只在当前页有效
<%@page contentType="text/html;charset=UTF-8"%>
<%@page import="java.util.*"%>
<%
//此时设置的属性只能够在本页中取得
pageContext.setAttribute("name","孤傲苍狼"); //设置属性
pageContext.setAttribute("date",new Date()); //设置属性
//注意:这里设置的两个属性的名字分别为name和date,这两个是字符串类型的数据,但对应的属性值MLDN和new Date这个两个值却不是字符串类型,而是两个Object类型的数据。
%>
<%
//取得设置的属性
String refName = (String)pageContext.getAttribute("name");
//由于取得的值为Object类型,因此必须使用String强制向下转型,转换成String类型
Date refDate = (Date)pageContext.getAttribute("date");
%>
<h1>姓名:<%=refName%></h1>
<h1>日期:<%=refDate%></h1> - request,在服务端转发(forward)过程经历的各页面中都有效
requestScopeDemo01.jsp
<%@page contentType="text/html;charset=UTF-8"%>
<%@page import="java.util.*"%>
<%
request.setAttribute("name","孤傲苍狼");
request.setAttribute("date",new Date());
%>
<%--使用jsp:forward标签进行服务器端跳转--%>
<jsp:forward page="/requestScopeDemo02.jsp" />requestScopeDemo02.jsp
<%@page contentType="text/html;charset=UTF-8"%>
<%@page import="java.util.*"%>
<%
//取得requestScopdemo01.jsp设置的属性
String refName = (String)request.getAttribute("name");
Date refDate = (Date)request.getAttribute("date");
%>
<h1>姓名:<%=refName%></h1>
<h1>日期:<%=refDate%></h1>
<h1>
<%--使用超链接的形式跳转,这是客户端跳转,URL地址会改变--%>
<a href="${pageContext.request.contextPath}/requestScopeDemo03.jsp">跳转到requestScopeDemo04.jsp</a>
</h1>requestScopeDemo03.jsp
<%@page contentType="text/html;charset=UTF-8"%>
<%@page import="java.util.*"%>
<%
//取得requestScopdemo01.jsp设置的属性
String refName = (String)request.getAttribute("name");
Date refDate = (Date)request.getAttribute("date");
%>
<h1>姓名:<%=refName%></h1>
<h1>日期:<%=refDate%></h1>对于上面三个页面,在服务端将页面1 forward到页面2,两者都有refName、refDate属性;页面2通过超链接点击转到页面3,页面3得不到这两个属性值。
- session,对于一个用户的所有页面有效
<%@page contentType="text/html;charset=UTF-8"%>
<%@page import="java.util.*"%>
<%
String refName = (String)session.getAttribute("name");
Date refDate = (Date)session.getAttribute("date");
%>
<h1>姓名:<%=refName%></h1>
<h1>日期:<%=refDate%></h1> - application,对于所有用户的所有页面有效
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*"%>
<%
//此时设置的属性任何用户都可以取得
application.setAttribute("name","孤傲苍狼"); //设置属性
application.setAttribute("date",new Date());
%>
<h1><a href="${pageContext.request.contextPath}/applicationScopeDemo02.jsp">applicationScopeDemo02</a></h1>如果在服务器上设置了过多的application属性,则会影响到服务器的性能。
四、关于pageContext属性范围
1、四种属性范围实现原理
之前所讲解的四种属性范围,实际上都是通过pageContext属性范围设置上的。打开pageContext所在的说明文档。
aaarticlea/png;base64,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" alt="" />
PageContext类继承了JspContext类,在JspContext类中定义了setAttribute方法,如下:
public abstract void setAttribute(String name,Object value,int scope)
此方法中存在一个scope的整型变量,此变量就表示一个属性的保存范围。

PageContext类继承了JspContext类,所以在PageContext类中实现了抽象的setAttribute方法:
public abstract void setAttribute(String name,Object value,int scope)
这个setAttribute()方法如果不写后面的int类型的scope参数,则此参数默认为PAGE_SCOPE,则此时setAttribute()方法设置的就是page属性范围,如果传递过来的int类型参数scope为REQUEST_SCOPE,则此时setAttribute()方法设置的就是request属性范围,同理,传递的scope参数为SESSION_SCOPE和APPLICATION_SCOPE时,则表示setAttribute()方法设置的就是session属性范围和application属性范围。
2、示例
下面通过代码来观察此四种属性范围常量的作用,以:request为例
范例:pageScopeDemo04.jsp:
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
pageContext.setAttribute("name","孤傲苍狼",PageContext.REQUEST_SCOPE); //设置属性,并指明属性范围
pageContext.setAttribute("date",new Date(),PageContext.REQUEST_SCOPE); //设置属性,并指明属性范围
%>
<jsp:forward page="/pageScopeDemo05.jsp"/>
pageScopeDemo05.jsp:
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
//使用request对象获取属性
String refName = (String)request.getAttribute("name");
Date refDate = (Date)request.getAttribute("date");
//也可以使用pageContext对象获取属性,只要在获取时指明对象的属性范围即可
String refName2 = (String)pageContext.getAttribute("name", PageContext.REQUEST_SCOPE);
Date refDate2 = (Date)pageContext.getAttribute("date", PageContext.REQUEST_SCOPE);
%>
使用request对象获取属性:
<h1>姓名:<%=refName%></h1>
<h1>日期:<%=refDate%></h1>
使用pageContext对象获取属性:
<h1>姓名:<%=refName2%></h1>
<h1>日期:<%=refDate2%></h1>
五、四种属性范围使用场合
1、request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的。
2、session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐。
3、application(servletContext):如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在application(servletContext)域中,像聊天数据。
JSP 属性范围的更多相关文章
- java web学习总结(二十六) -------------------JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- JavaWeb---总结(十八)JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- javaweb学习总结(十八)——JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- javaWeb学习总结(8)- JSP属性范围(5)
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- JavaWeb学习 (十七)————JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- Idea破解办法+idea免费生成注册码+jsp属性选择器+注解什么的都报错
Idea破解办法: http://blog.csdn.net/bitcarmanlee/article/details/54951589 idea免费生成注册码: http://idea.iteblo ...
- javaweb学习总结(十八)——JSP属性范围(转)
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- Java Web学习总结(17)——JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- JavaWeb——JSP内置对象application,JSP属性范围
application application语法 application对象 JSP属性范围 范围的分类 page request session application pagecontext延伸 ...
随机推荐
- canvas模拟重力效果
总结 速度和加速度是动画的基础元素,其中两者都是向量,包括了一个重要因素:方向. 要学会应用 分解 和 合成 ,将速度或加速度分解到x.y轴上,然后将每条轴上的加速度或速度相加,然后再分别与物体的位置 ...
- js原型继承的几种方式
1. 原型链继承 2,构造函数继承(对象冒充继承) 3,组合继承(原型链继承+构造函数继承) 4,原型式继承 5. 寄生组合式继承 一.原型链继承 function Show(){ this.name ...
- elasticsearch与mongodb分布式集群环境下数据同步
1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索 ...
- jQ1.5中的事件系统(低版本的事件系统)
jQ的一个个版本事系统都在修正着bug和不断优化, 而且看了事件系统对事件的兼容更加熟悉, 更加了解jQ内部的事件机制. 因为jQ对事件系统引入了事件命名空间,事件的代理, 事件的手动触发,事件描述等 ...
- C#-WinForm-跨窗体 构造函数传值 及应用—登录式窗口传值、如何关闭主页面时关闭应用程序、如何打开唯一窗口—★★★★★五星重量级
构造函数可以传任意类型的值,并可以同时传多个值 结构函数传值的初步应用--简单的登陆式界面 现在我有两个窗体Form3和Form4,如下,如何点击Form3中的按钮后,打开Form4并将Form3中的 ...
- 怎么学习AOPR使用方法
Advanced Office Password Recovery作为一款专业级别的Office密码破解工具,对十几种office文档的密码都可以有效的破解.一些用户朋友才开始接触Advanced O ...
- Thinking in java学习笔记之finalize
finalize:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下次垃圾回收动作发生时,才会真正回收对象占用的内存,所以可用此作为对象终结条件的验证.注意的三 ...
- 【poj2455】 Secret Milking Machine
http://poj.org/problem?id=2455 (题目链接) 题意 给出一张n个点,p条边的无向图,需要从1号节点走到n号节点一共T次,每条边只能经过1次,问T次经过的最大的边最小是多少 ...
- 【bzoj2118】 墨墨的等式
http://www.lydsy.com/JudgeOnline/problem.php?id=2118 (题目链接) 题意 给出${B}$的取值范围${[Bmin,Bmax]}$,求方程${a_{1 ...
- Jquery实现滚动到底部加载更多(最原始)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...