JSP 属性范围

参考文献:http://www.cnblogs.com/xdp-gacl/p/3781056.html

一、JSP属性范围

  所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围。

  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)


删除属性

三、四种属性范围

  1. 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>

  2. 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得不到这两个属性值。

  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>
  4. 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属性范围的进一步补充

  之前所讲解的四种属性范围,实际上都是通过pageContext属性范围设置上的。打开pageContext所在的说明文档。

  

  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)域中,像聊天数据。

时间: 2024-10-18 09:11:41

JSP 属性范围的相关文章

javaweb学习总结(十八)——JSP属性范围

所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得 一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得. 一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这个人设置的东西只要这个人不走,就依然有效) 上下文中:在整个服务器上设置的属性,所有人都可以访

JavaWeb---总结(十八)JSP属性范围

所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得 一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得. 一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这个人设置的东西只要这个人不走,就依然有效) 上下文中:在整个服务器上设置的属性,所有人都可以访

JSP属性范围

首先声明:本文转载自:@孤傲苍狼 https://home.cnblogs.com/u/xdp-gacl/ 所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得 一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得. 一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话

javaweb学习总结(十八)——JSP属性范围【转】

所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得 一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得. 一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这个人设置的东西只要这个人不走,就依然有效) 上下文中:在整个服务器上设置的属性,所有人都可以访

javaWeb学习总结(8)- JSP属性范围(5)

所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得 一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得. 一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这个人设置的东西只要这个人不走,就依然有效) 上下文中:在整个服务器上设置的属性,所有人都可以访

JSP九大内置对象和四种属性范围解读

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文首先主要解说了JSP中四种属性范围的概念.用法与实例. 然后在这个基础之上又引入了九大内置对象,并对这几大内置对象一个一个的进行分析的解读.内容非常具体,例子都附有代码和执行的结果截图. 本文project下载 一.四种属性范围 1.1.在JSP中提供了四种属性保存范围 page:在一个页面内保存属性.跳转之后无效request:在一次服务请求范围内.server跳转后依旧有效se

JSP基础——属性保存范围和request对象

JSP属性保存范围 JSP中提供了四种属性保存范围,分别为page,request,session及application. 1.page范围,指设置的属性只在当前页面有效.通过pageContext的setAttribute()方法来设置属性,通过pageContext的getAttribute()来取得属性. 代码范例: <% pageContext.setAttribute("name","James"); %> <% String str=

深入分析JavaWeb Item16 -- jsp 四大域(属性)范围

jsp里面有四大域,作用域从小到大分别是page域,request域,session域,application(servletContext)域,域也可以称为属性范围.所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: page域--当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得 request域--一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的

JSP中Request属性范围

JSP属性范围,通过以下几个测试代码来学习request属性的范围 测试一(JSP动态指令方式传参): 测试内容: <jsp:param .../>添加参数,通过<jsp:forward page="...">来实现服务器端跳转,以此来测试request属性的范围: 页面RequestScopeDemo.jsp (添加info1参数) -> 通过<jsp:forward page="RequestScopeDemo_1.jsp"&