• JSP四大作用域属性范围


    JSP四大作用域分别为:page, request ,session, application 。

        第一个作用域是page,他只在当前页面有效,也就是用户请求的页面有效,当当前页面关闭或转到其他页面时,page对象将在响应回馈给客户端后释放。

        第二个作用域是request,他在当前请求中有效,request可以通过setAttribute()方法实现页面中的信息传递,也可以通过forward()方法进行页面间的跳转,需要注意的是request是转发不是重定向,转发相对于浏览器来说是透明的,也就是无论页面如何跳转,地址栏上显示的依旧是最初的地址。

        第三个作用域是session,他在当前回话中有效。当一个台电脑上的同一浏览器对服务器进行多次访问时,在这多次访问之间传递的信息就是session作用域的范围。它从浏览器发出第一个HTTP请求即可认为会话开始,但是会话结束的时间是不确定的,因为在浏览器关闭时并不会通知服务器,一般Tomcat设置的默认时间为120分钟,也可以通过setMaxInactiveInterval(int)方法进行设置,或是通过invalidate()方法强制结束当前会话。

        第四个作用域是application,他在所有的应用程序中都有效,也就是当服务器开始到服务器结束这段时间,application作用域中存储的数据都是有效的,同样可以通过setAttribute赋值和getAttribute取值。 

     1.page的属性作用域

      page,它只在当前页面有效,也就是用户请求的页面有效。但是在使用page属性范围的时候必须注意的是,虽然习惯上将页面范围的属性称为page范围,但是实际上操作的时候是使用pageContext内置对象完成的。

    通过这里建立一个maven的web项目。

    在index.jsp页面:

    <%@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 name = (String)pageContext.getAttribute("name");
        //由于取得的值为Object类型,因此必须使用String强制向下转型,转换成String类型
        Date date = (Date)pageContext.getAttribute("date");
    %>
    <h1>姓名:<%=name%></h1>
    <h1>日期:<%=date%></h1>

    运行结果:

    页设置的pageContext范围属性在本页确实可以取得。

    在index.jsp加上一句:

    <jsp:forward page="WEB-INF/jsp/pageSecond.jsp" />
    pageSecond.jsp页面如下:
    <%@page contentType="text/html;charset=UTF-8"%>
    <%@page import="java.util.*"%>
    <%
        String name = (String)pageContext.getAttribute("name");
        Date date = (Date)pageContext.getAttribute("date");
    %>
    <h1>姓名:<%=name%></h1>
    <h1>日期:<%=date%></h1>

    结果:

     页面跳转之后,获取不到属性了。如果现在希望跳转到其他页面之中,依然可以取得,则可以扩大属性范围,使用request属性范围即可。

    2.request属性作用域

    request属性范围表示在一次服务器跳转中有效,只要是服务器跳转,则设置的request属性可以一直传递下去。

      

     index.jsp如下所示:

    <%@page contentType="text/html;charset=UTF-8"%>
    <%@page import="java.util.*"%>
    <%
        //此时设置的属性只能够在本页中取得
        request.setAttribute("name","哈哈哈哈");  //设置属性
        request.setAttribute("date",new Date()); //设置属性
        //注意:这里设置的两个属性的名字分别为name和date,这两个是字符串类型的数据,但对应的属性值MLDN和new Date这个两个值却不是字符串类型,而是两个Object类型的数据。
    %>
    <%
        //取得设置的属性
        String name = (String)request.getAttribute("name");
        //由于取得的值为Object类型,因此必须使用String强制向下转型,转换成String类型
        Date date = (Date)request.getAttribute("date");
    %>
    <h1>姓名:<%=name%></h1>
    <h1>日期:<%=date%></h1>

    结果如图:

     跳转到pageSecond.jsp之后,依然可以获得属性。不管多少个页面。

    但是如果,此时使用了超链接的方式传递的话,则属性是无法向下继续传递的。

    3.session属性作用域

    session设置的属性不管如何跳转,都可以取得的。当然,session只针对一个用户

      

    不管是采用页面跳转,还是超链接(相当于客户端跳转),在别的页面依然可以获取第一个页面的属性。但是新打开一个浏览器,则无法获取属性。

     4.application属性作用域

      因为application属性范围是在服务器上设置的一个属性,所以一旦设置之后任何用户都可以浏览到此属性。

     5.pageContext属性作用域的进一步补充

    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属性范围。

    比如index.jsp:

    <%@page contentType="text/html;charset=UTF-8"%>
    <%@page import="java.util.*"%>
    <%
        //此时设置的属性只能够在本页中取得
        pageContext.setAttribute("name","哈哈哈哈",PageContext.REQUEST_SCOPE);  //设置属性
        pageContext.setAttribute("date",new Date(),PageContext.REQUEST_SCOPE); //设置属性
        //注意:这里设置的两个属性的名字分别为name和date,这两个是字符串类型的数据,但对应的属性值MLDN和new Date这个两个值却不是字符串类型,而是两个Object类型的数据。
    %>
    <%
        //取得设置的属性
        String name = (String)pageContext.getAttribute("name");
        //由于取得的值为Object类型,因此必须使用String强制向下转型,转换成String类型
        Date date = (Date)pageContext.getAttribute("date");
    %>
    <jsp:forward page="WEB-INF/jsp/pageSecond.jsp" />
    pageSecond.jsp:
    <%@page contentType="text/html;charset=UTF-8"%>
    <%@page import="java.util.*"%>
    <%
        String name = (String)pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);
        Date date = (Date)pageContext.getAttribute("date",PageContext.REQUEST_SCOPE);
    %>
    <h1>姓名:<%=name%></h1>
    <h1>日期:<%=date%></h1>

    跳转之后依然可以获取属性,pageContext相当于request。

    参考: 这里

  • 相关阅读:
    dalvik浅析二:jni、so
    android apk壳
    prism4 StockTrader RI 项目分析一些体会
    PRISM ‘VS100COMNTOOLS’ not set. Cannot set the build environment
    安卓移动应用代码安全加固系统设计及实现
    手机游戏外挂技术研究与运用
    移动终端安全威胁与应对措施
    游戏软件反外挂技术方案的设计和安全解决方案
    网络安全等级保护 2.0 下的安全体系建设
    APP加密,ios代码混淆工具,虚拟化技术 适用于移动应用程序的虚拟化加密软件
  • 原文地址:https://www.cnblogs.com/heqiyoujing/p/9516550.html
Copyright © 2020-2023  润新知