JSP中的四种属性范围(重点)

简介:

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=\'#\'" /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=\'#\'" /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 两个属性范围使用的频率是最高的。











本文转自yunlielai51CTO博客,原文链接:http://blog.51cto.com/4925054/1117721,如需转载请自行联系原作者

相关文章
|
XML 前端开发 Oracle
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
255 2
|
Java
JSP第二篇【内置对象的介绍、4种属性范围、应用场景】(二)
JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用
347 0
JSP第二篇【内置对象的介绍、4种属性范围、应用场景】(二)
|
缓存 Java API
JSP第二篇【内置对象的介绍、4种属性范围、应用场景】(一)
JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用
317 0
JSP第二篇【内置对象的介绍、4种属性范围、应用场景】(一)
|
开发框架 前端开发 Java
JSP 四种属性范围|学习笔记
快速学习 JSP 四种属性范围
186 0
|
Web App开发 缓存 Java
JSP第二篇【内置对象的介绍、4种属性范围、应用场景】
什么是JSP内置对象 JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用 细心的朋友会发现,我们没有在JSP页面上定义过out对象,却可以直接使用!其实out对象就是JSP内置对象之一。
1310 0
|
Web App开发 编解码 Java
关于JSP页面中的pageEncoding和contentType两种属性的区别
转自:http://blog.csdn.net/dragon4s/article/details/6604624 JSP指令标签中这句有什么用途? 关于JSP页面中的pageEncoding和contentType两种属性的区别:   pageEncoding是jsp文件本身的编码   contentType的charset是指服务器发送给客户端时的内容编码   JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。
1653 0
|
Java
JSP自定义简单标签入门之带有属性
上面写的那个简单标签来控制页面中标签内容的重复次数是固定的,这就是权限“写死了”,这是非常不好的行为,因为其灵活性太差。所以下面就介绍一种使用属性来控制标签内容输出次数的方法。 准备工作 创建实现了SimpleTag接口的实现类(或者是继承了SimpleTagSupport类的子类) 在类中为相应的属性字段添加setter方法,注意字段名称一定要一致。
1123 0
|
Java 容器
【学习笔记】Jsp与Servlet技术
【学习笔记】Jsp与Servlet技术
283 0