博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP中的四种属性范围(重点)
阅读量:6272 次
发布时间:2019-06-22

本文共 4741 字,大约阅读时间需要 15 分钟。

3.1、四种属性范围(重点

       
所谓的属性范围,就是指一个对象可以跨多少个 JSP
页面之后可以继续使用。

3.1.1、操作方法

       
在整个 JAVA WEB
中属性操作使用如下的方法:
              
· 
设置属性: public void setAttribute(String name,Object attribute)
              
· 
取得属性: public Object getAttribute(String name)
              
· 
删除属性: public Object removeAttribute(String name)
       
JSP
中有以下四个对象都支持以上的三个方法:
              
·  page
pageContext
              
·  request
              
·  session
              
·  application

3.1.2page属性范围

       
在一个 JSP
页面上设置的属性只能在一个页面取得,跳转到其他页面则此属性消失。
PageScopeDemo01.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
设置两个属性
         pageContext.setAttribute("uname","HELLO") ;
         pageContext.setAttribute("udate",new Date()) ;
         // 
取得属性
         String name = (String)pageContext.getAttribute("uname") ;
         Date date = (Date)pageContext.getAttribute("udate") ;
%>
<h1>name --> <%=name%></h1>
<h1>date --> <%=date%></h1>
       
当前页可以取得所设置的属性,下面对页面进行修改,让其完成一此跳转。
PageScopeDemo02.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
设置两个属性
         pageContext.setAttribute("uname","HELLO") ;
         pageContext.setAttribute("udate",new Date()) ;
%>
<jsp:forward page="PageScopeDemo03.jsp"/>
PageScopeDemo03.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
取得属性
         String name = (String)pageContext.getAttribute("uname") ;
         Date date = (Date)pageContext.getAttribute("udate") ;
%>
<h1>name --> <%=name%></h1>
<h1>date --> <%=date%></h1>
       
证明:一个页面上设置的属性,只能在本页面中取得。如果现在希望可以在跳转页中取得,则可以扩大范围到 request
范围上去。

3.1.3request属性范围

       request
可以把属性保存在一次服务器跳转范围之中。
RequestScopeDemo01.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
设置两个属性
         request.setAttribute("uname","HELLO") ;
         request.setAttribute("udate",new Date()) ;
%>
<jsp:forward page="RequestScopeDemo02.jsp"/>
RequestScopeDemo02.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
取得属性
         String name = (String)request.getAttribute("uname") ;
         Date date = (Date)request.getAttribute("udate") ;
%>
<h1>name --> <%=name%></h1>
<h1>date --> <%=date%></h1>
但是,需要注意的是,如果使用了下面的跳转形式,则不能够取得:
RequestScopeDemo03.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
设置两个属性
         request.setAttribute("uname","HELLO") ;
         request.setAttribute("udate",new Date()) ;
%>
<a href="RequestScopeDemo02.jsp">RequestScopeDemo02.jsp</a>
       
发现以上程序执行之后,地址栏改变了,但是设置的属性也消失了。
       
如果现在希望无论怎样跳转,属性都可以被保存下来,则就要扩大到 session
范围

3.1.4session属性范围

       session
属性范围无论页面怎样跳转,都可以保存下来,但是只针对于同一个浏览器打开的相关页面。
SessionScopeDemo01.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
设置两个属性
         session.setAttribute("uname","HELLO") ;
         session.setAttribute("udate",new Date()) ;
%>
<a href="SessionScopeDemo02.jsp">SessionScopeDemo02.jsp</a>
SessionScopeDemo02.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
取得属性
         String name = (String)session.getAttribute("uname") ;
         Date date = (Date)session.getAttribute("udate") ;
%>
<h1>name --> <%=name%></h1>
<h1>date --> <%=date%></h1>
       
可以把每一个用户理解为一个 session
。如果现在希望所有的用户都可以看见,则就可以继续扩大范围 
——  application
范围。

3.1.5application属性范围

       application
范围,是把属性设置在整个服务器上,所有的用户都可以进行访问。
ApplicationScopeDemo01.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
设置两个属性
         application.setAttribute("uname","HELLO") ;
         application.setAttribute("udate",new Date()) ;
%>
ApplicationScopeDemo02.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
取得属性
         String name = (String)application.getAttribute("uname") ;
         Date date = (Date)application.getAttribute("udate") ;
%>
<h1>name --> <%=name%></h1>
<h1>date --> <%=date%></h1>
       
如果服务器一关闭,则所有的 application
属性都消失,属性保存在服务器之上,如果此属性保存的内容过多,则肯定会直接影响到服务器的性能。所以一般尽可能少设置 application
属性。

3.1.6pageContext对象的补充

       JSP
中如果要想设置一个 page
范围的属性则一定使用 pageContext
对象,实际上对于整个 JSP
代码,所有的四种属性范围都是可以通过 pageContext
对象进行设置的,因为在此对象中的设置属性方法有两个:
       
·  public void setAttribute(String name,Object attribute) 
à  
设置的属性默认为 page
范围
·  public void setAttribute(String name,Object o,int scope) 
à  
可以指定属性的范围
       |- 
PageContext
类中提供了以下几个常量:
              |- 
表示 page
范围: public static final int PAGE_SCOPE
              |- 
表示 request
范围: public static final int REQUEST_SCOPE
              |- 
表示 session
范围: public static final int SESSION_SCOPE
              |- 
表示 application
范围: public static final int APPLICATION_SCOPE
下面通过 pageContext
对象设置一个 request
范围的属性
RequestScopeDemo04.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
         // 
设置两个属性
         pageContext.setAttribute("uname","HELLO",PageContext.REQUEST_SCOPE) ;
         pageContext.setAttribute("udate",new Date(),PageContext.REQUEST_SCOPE) ;
%>
<jsp:forward page="RequestScopeDemo02.jsp"/>
使用的原则:
       
· 
因为四种属性范围的保存时间不同,所以占用内存的时间也就不同了,能使用 request
就不要使用 session
,一般情况下, request
session
两个属性范围使用的频率是最高的。
本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/101383,如需转载请自行联系原作者
你可能感兴趣的文章
基于Internet的软件工程策略
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
Vue------第二天(计算属性、侦听器、绑定Class、绑定Style)
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>
VC中怎么读取.txt文件
查看>>
如何清理mac系统垃圾
查看>>