javaweb学习总结(十八)——JSP属性范围(转)
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围。
一、JSP属性范围
JSP中提供了四种属性范围,四种属性范围分别指以下四种:
- 当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得
- 一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得。
- 一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这个人设置的东西只要这个人不走,就依然有效)
- 上下文中:在整个服务器上设置的属性,所有人都可以访问
二、属性的操作方法
既然JSP中提供了四种属性范围,则四种属性范围中都将包含以下的属性操作方法。
No. |
方法 |
描述 |
1 |
public void setAttribute(String name,Object value) |
设置属性 |
2 |
public object getAttribute(String name) |
取得属性 |
3 |
public void removeAttribute(String name) |
删除属性 |
属性的操作无外乎就是增加、取得和删除这个几个操作。
单词Attribute的意思是“属性”,setAttribute(String name,Object value)从单词的组合来看就可以知道是这个方法的是设置属性,设置属性的名字和属性的值,名字(name)为String类型,值(value)为Object类型,由于值为Object类型,这表示可以设置任意类型的数据作为值,因为所有的类都是从Object类型继承而来。因此设置属性值的时候可以是任意类型的数据。getAttribute(String name)方法是根据属性的名字取得属性,removeAttribute(String name)方法是根据属性的名字删除属性。
三、JSP四种属性范围的具体介绍
3.1、page属性范围(pageContext)
page属性范围相对好理解一些:在一个页面设置的属性,跳转到其他页面就无法访问了。但是在使用page属性范围的时候必须注意的是,虽然习惯上将页面范围的属性称为page范围,但是实际上操作的时候是使用pageContext内置对象完成的。
pageContext属性范围操作流程图
pageContext从字面上的定义,可以发现,是表示一个页面(page)的上下文(Context),可以表示一个页面中的所有内容。
从操作流程图来看,在第一个页面设置的属性经过服务器端跳转到第二个页面以后,在第二个页面是无法取得在第一个页面中设置的属性的,就好比现在坐着的桌子上有一支笔,但一旦离开了这张桌子,坐到别的桌子上时,笔就没有了。
下面通过代码来观察此范围的属性
范例:pageContextDemo01.jsp
在页面中设置两个属性

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 //此时设置的属性只能够在本页中取得
5 pageContext.setAttribute("name","孤傲苍狼"); //设置属性
6 pageContext.setAttribute("date",new Date()); //设置属性
7 //注意:这里设置的两个属性的名字分别为name和date,这两个是字符串类型的数据,但对应的属性值MLDN和new Date这个两个值却不是字符串类型,而是两个Object类型的数据。
8 %>
9 <%
10 //取得设置的属性
11 String refName = (String)pageContext.getAttribute("name");
12 //由于取得的值为Object类型,因此必须使用String强制向下转型,转换成String类型
13 Date refDate = (Date)pageContext.getAttribute("date");
14 %>
15 <h1>姓名:<%=refName%></h1>
16 <h1>日期:<%=refDate%></h1>

程序运行结果如下:
这说明了在本页设置的pageContext范围属性在本页确实可以取得,下面使用跳转语句,观察跳转之后是否还可以取得属性。
范例:pageScopeDemo02.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 pageContext.setAttribute("name","孤傲苍狼");
5 pageContext.setAttribute("date",new Date());
6 %>
7 <%--使用jsp:forward标签进行服务器端跳转--%>
8 <jsp:forward page="/pageScopeDemo03.jsp" />

范例:pageScopeDemo03.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 String refName = (String)pageContext.getAttribute("name");
5 Date refDate = (Date)pageContext.getAttribute("date");
6 %>
7 <h1>姓名:<%=refName%></h1>
8 <h1>日期:<%=refDate%></h1>

在以上程序中的pageScopeDemo02.jsp只是设置了两个属性,跳转到pageScopeDemo03.jsp之后再在pageScopeDemo03.jsp中取在pageScopeDemo02.jsp设置的page属性。此时,运行结果如下:
使用了服务器端跳转,但是发现内容并不能取得,证明page范围的属性只能在本页中取得,跳转到其他页面之中不能取得。如果现在希望跳转到其他页面之中,依然可以取得,则可以扩大属性范围,使用request属性范围即可。
3.2、request属性范围
request属性范围表示在一次服务器跳转中有效,只要是服务器跳转,则设置的request属性可以一直传递下去。
范例:requestScopeDemo01.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 request.setAttribute("name","孤傲苍狼");
5 request.setAttribute("date",new Date());
6 %>
7 <%--使用jsp:forward标签进行服务器端跳转--%>
8 <jsp:forward page="/requestScopeDemo02.jsp" />

范例:requestScopeDemo02.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 //取得requestScopdemo01.jsp设置的属性
5 String refName = (String)request.getAttribute("name");
6 Date refDate = (Date)request.getAttribute("date");
7 %>
8 <h1>姓名:<%=refName%></h1>
9 <h1>日期:<%=refDate%></h1>

运行结果如下:
从运行结果来看,程序跳转了,但是与page范围相比,内容可以向下继续传递,即在第一个页面设置的属性跳转到第二个页面后在第二个页面中依然可以取得第一个页面设置的属性。
如果现在有第三个页面了,则也可以继续向后传递
范例:修改requestScopeDemo02.jsp
1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%--使用jsp:forward标签进行服务器端跳转--%>
4 <jsp:forward page="/requestScopeDemo03.jsp" />
范例:requestScopeDemo03.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 //取得requestScopdemo01.jsp设置的属性
5 String refName = (String)request.getAttribute("name");
6 Date refDate = (Date)request.getAttribute("date");
7 %>
8 <h1>姓名:<%=refName%></h1>
9 <h1>日期:<%=refDate%></h1>

以上的结果依然可以访问,但是如果,此时使用了超链接的方式传递的话,则属性是无法向下继续传递的。
范例:修改requestScopeDemo03.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 //取得requestScopdemo01.jsp设置的属性
5 String refName = (String)request.getAttribute("name");
6 Date refDate = (Date)request.getAttribute("date");
7 %>
8 <h1>姓名:<%=refName%></h1>
9 <h1>日期:<%=refDate%></h1>
10 <h1>
11 <%--使用超链接的形式跳转,这是客户端跳转,URL地址会改变--%>
12 <a href="${pageContext.request.contextPath}/requestScopeDemo04.jsp">跳转到requestScopeDemo04.jsp</a>
13 </h1>

此时使用了超链接跳转,一旦跳转之后,地址栏改变,所以此种跳转也可以称为客户端跳转。
requestScopeDemo04.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 //取得requestScopdemo01.jsp设置的属性
5 String refName = (String)request.getAttribute("name");
6 Date refDate = (Date)request.getAttribute("date");
7 %>
8 <h1>姓名:<%=refName%></h1>
9 <h1>日期:<%=refDate%></h1>

运行结果:
requestScopeDemo04.jsp页面显示的结果是null。这说明了在requestScopeDemo01.jsp这个页面设置的属性经过超链接这种客户端跳转到别的页面时别的页面是无法取得requestScopeDemo01.jsp中设置的属性的。
如果还想进一步扩大属性范围,则可以使用session范围属性
3.3、session属性范围
session设置的属性不管如何跳转,都可以取得的。当然,session只针对一个用户
在第一个页面上设置的属性,跳转(服务器跳转/客户端跳转)到其他页面之后,其他的页面依然可以取得第一个页面上设置的属性。
下面通过代码来观察session属性范围
范例:sessionScopeDemo01.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 //此时设置的属性只能够在与本页相关的任何页面中取得
5 session.setAttribute("name","孤傲苍狼"); //设置属性
6 session.setAttribute("date",new Date());
7 %>
8 <%--使用服务器端跳转--%>
9 <jsp:forward page="/sessionScopeDemo02.jsp"/>

这里使用的是服务器端跳转
sessionScopeDemo02.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 String refName = (String)session.getAttribute("name");
5 Date refDate = (Date)session.getAttribute("date");
6 %>
7 <h1>姓名:<%=refName%></h1>
8 <h1>日期:<%=refDate%></h1>
9 <%--使用超链接这种客户端跳转--%>
10 <h1><a href="${pageContext.request.contextPath}/sessionScopeDemo03.jsp">sessionScopeDemo03</a></h1>

这里使用的是超链接这种客户端跳转
运行程序sessionScopeDemo01.jsp结果如下所示:
sessionScopeDemo03.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4 String refName = (String)session.getAttribute("name");
5 Date refDate = (Date)session.getAttribute("date");
6 %>
7 <h1>姓名:<%=refName%></h1>
8 <h1>日期:<%=refDate%></h1>

点击超链接sessionScopeDemo03,跳转到了sessionScopeDemo03.jsp这个页面,此时程序的运行结果如下:
这说明了即使是采用客户端跳转,在别的页面依然可以取得第一个页面中设置的session属性。但是,如果,此时新开了一个浏览器,则sessionScopeDemo03.jsp肯定无法取得sessionScopeDemo01.jsp中设置的session对象的属性,因为session只是保留了一个人的信息。
如果一个属性想让所有的用户都可以访问,则可以使用最后一种属性范围:application范围。
3.4、application属性范围
因为application属性范围是在服务器上设置的一个属性,所以一旦设置之后任何用户都可以浏览到此属性。
下面通过代码来观察application属性范围
范例:applicationScopeDemo01.jsp

1 <%@ page contentType="text/html;charset=GBK"%>
2 <%@ page import="java.util.*"%>
3 <%
4 //此时设置的属性任何用户都可以取得
5 application.setAttribute("name","孤傲苍狼"); //设置属性
6 application.setAttribute("date",new Date());
7 %>
8 <h1><a href="${pageContext.request.contextPath}/applicationScopeDemo02.jsp">applicationScopeDemo02</a></h1>

范例:applicationScopeDemo02.jsp

1 <%@ page contentType="text/html;charset=GBK"%>
2 <%@ page import="java.util.*"%>
3 <%
4 String refName = (String)application.getAttribute("name");
5 Date refDate = (Date)application.getAttribute("date");
6 %>
7 <h1>姓名:<%=refName%></h1>
8 <h1>日期:<%=refDate%></h1>

观察页面的运行效果:
开启多个浏览器窗口,运行applicationScopeDemo02.jsp时,都可以显示出上图所示的结果,因为属性范围设置在了服务器中,所以只要是连接到此服务器的任意用户都可以取得此属性,当然,如果服务器关闭的话,则此属性肯定消失。
如把Tomcat服务器先关闭后再重新启动,打开浏览器窗口运行applicationScopeDemo02.jsp时,得到的结果如下图所示:
注意:如果在服务器上设置了过多的application属性,则会影响到服务器的性能。
3.5、关于pageContext属性范围的进一步补充
之前所讲解的四种属性范围,实际上都是通过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方法:
1 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属性范围。
下面通过代码来观察此四种属性范围常量的作用,以:request为例
范例:pageScopeDemo04.jsp

1 <%@page contentType="text/html;charset=GBK"%>
2 <%@page import="java.util.*"%>
3 <%
4 pageContext.setAttribute("name","孤傲苍狼",PageContext.REQUEST_SCOPE); //设置属性,并指明属性范围
5 pageContext.setAttribute("date",new Date(),PageContext.REQUEST_SCOPE); //设置属性,并指明属性范围
6 %>
7 <jsp:forward page="/pageScopeDemo05.jsp"/>

pageScopeDemo05.jsp

1 <%@page contentType="text/html;charset=GBK"%>
2 <%@page import="java.util.*"%>
3 <%
4 //使用request对象获取属性
5 String refName = (String)request.getAttribute("name");
6 Date refDate = (Date)request.getAttribute("date");
7 //也可以使用pageContext对象获取属性,只要在获取时指明对象的属性范围即可
8 String refName2 = (String)pageContext.getAttribute("name", PageContext.REQUEST_SCOPE);
9 Date refDate2 = (Date)pageContext.getAttribute("date", PageContext.REQUEST_SCOPE);
10 %>
11 使用request对象获取属性:
12 <h1>姓名:<%=refName%></h1>
13 <h1>日期:<%=refDate%></h1>
14 使用pageContext对象获取属性:
15 <h1>姓名:<%=refName2%></h1>
16 <h1>日期:<%=refDate2%></h1>

运行结果:
从运行结果可以看到:在pageScopeDemo04.jsp使用的是pageContext对象调用setAttribute()方法设置的属性范围是request的属性范围,因此在调用此方法时,把一个int类型的scope范围常量REQUEST_SCOPE传递了进来,这个REQUEST_SCOPE属性范围常量的作用就是告诉pageContext对象现在要设置的属性范围是request的属性范围,所以pageScopeDemo05.jsp这个页面中可以直接使用request.getAttribute();方法获取在pageScopeDemo04.jsp设置的属性。
四、jsp四种属性范围的使用场合
1、request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的。
2、session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐。
3、application(servletContext):如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在application(servletContext)域中,像聊天数据。
javaweb学习总结(十八)——JSP属性范围(转)的更多相关文章
- javaweb学习总结(十八)——JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- JavaWeb---总结(十八)JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- javaweb学习总结(十九)——JSP标签
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...
- javaweb学习总结(十六)——JSP指令
一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: pa ...
- javaweb学习总结(十四)——JSP原理
一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...
- JavaWeb学习 (二十八)————文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- javaweb学习总结(十六)——JSP指令(转)
一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: pa ...
- javaweb学习总结(十四)——JSP原理(转)
一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...
- javaweb学习总结(十五)——JSP基础语法
任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...
随机推荐
- Java动画 重力弹球 如鹏游戏引擎 精灵 设计一个小球加速落地又减速弹起并反复直到停止的Java程序
package com.swift; import com.rupeng.game.GameCore; public class BouncingBall implements Runnable { ...
- 【转】 VC中TCP实现 异步套接字编程的原理+代码
所谓的异步套接字编程就是 调用了 如下函数 WSAAsyncSelect 设置了 套接字的状态为异步,有关函数我会在下面详细介绍... 异步套接字解决了 套接字编程过程中的堵塞问题 .... ...
- XML 转 fastJSON
import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Doc ...
- Ajax原生代码
Ajax传数据有两种方式:get/post.下面是前台的get/post方式的代码. //------------原生--------- function AjaxGET(){ //第一步 调用Aja ...
- Hogan的安装和使用
Hogan的安装和使用 通过npm安装hogan: npm install hogan.js --save-dev CommonJs下的使用方式: // 引入hogan var hogan = req ...
- 第3-5课 填充左侧菜单/品牌的添加 Thinkphp5商城第四季
目录 左侧菜单的填充 品牌的添加 form标签里要加上method="post" enctype="multipart/form-data" form标签里如果 ...
- ubuntu中卸载没有安装完全的软件包
sudo apt-get autoclean sudo apt-get clean sudo apt-get autoremove
- pyqt设计
pyqt是python设计GUI的第三方包 作为一个小白,我觉得这篇博客贼好,我就是按照这个博客写的. 这个博客一共分5步,每一步都特别详细. pyqt 打包exe时遇到的问题(我的python环境是 ...
- leetcode-13-basic-binaryTree
101. Symmetric Tree 解题思路: 递归的方法如下.分几种情况考虑,如果左子树和右子树都是空,那么返回true:如果不同时为空,返回false:如果都不为空,则 判断其值是否相等,不相 ...
- Python虚拟机函数机制之位置参数的默认值(五)
位置参数的默认值 在Python中,允许函数的参数有默认值.假如函数f的参数value的默认值是1,在我们调用函数时,如果传递了value参数,那么f调用时value的值即为我们传递的值,如果调用时没 ...