• 中文
    • English
  • 注册
  • 查看作者
    • 11:作用域

      一.  常用方法

      在介绍下面的几个作用域之前,我们先来介绍三个常用的方法:

      保存:setAttribute(String,Object)
      
      读取:getAttribute(String)
      
      删除:removeAttribute(String)

      二.  pageContext

      index.jsp:

      <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <%
          pageContext.setAttribute("name", "zhangjia");
      
       //   request.getRequestDispatcher("b.jsp").forward(request,response);
      
      //    response.sendRedirect("b.jsp");
      %>
      <a href="b.jsp">链接</a>
      <p><%=pageContext.getAttribute("name")%></p>
      </body>
      </html>

      b.jsp:

      <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <p><%=pageContext.getAttribute("name")%></p>
      </body>
      </html>

      我们可以从以下几个方面分析pageContext的作用域:

      • 直接访问index.jsp,可以输出zhangjia

      • 直接访问b.jsp(无论是否访问过index.jsp),输出null

      • 通过index.jsp的a标签跳转到b.jsp,输出null

      • 通过index.jsp转发到b.jsp,输出null

      • 通过index.jsp重定向到b.jsp,输出null

      通过上面结果可以看出,pageContext只有在当前页才能获取到数据,所以一句话总结PageContext的作用域:pageContext的作用域仅限当前页面。

      三.  request

      index.jsp:

      <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <%
          request.setAttribute("name", "zhangjia");
      
          request.getRequestDispatcher("b.jsp").forward(request,response);
      
      //    response.sendRedirect("b.jsp");
      %>
      <a href="b.jsp">链接</a>
      <p><%=request.getAttribute("name")%></p>
      </body>
      </html>

      b.jsp:

      <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <p><%=request.getAttribute("name")%></p>
      </body>
      </html>

      我们从以下几个方面分析request的作用域:

      • 直接访问index.jsp,可以输出zhangjia

      • 直接访问b.jsp(无论是否访问过index.jsp),输出null

      • 通过index.jsp的a标签跳转到b.jsp,输出null

      • 通过index.jsp转发到b.jsp,输出zhangjia

        • 因为转发只产生一次请求

      • 通过index.jsp重定向到b.jsp,输出 null

        • 因为重定向产生两次请求,所以有两个request对象,分别是index.jsp的request对象和b.jsp的request对象

      通过上面结果可以看出,request的作用域在连续的服务器端跳转中有效。

      四.  session

      index.jsp:

      <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <%
          session.setAttribute("name", "zhangjia");
      
      //    request.getRequestDispatcher("b.jsp").forward(request,response);
      
      //    response.sendRedirect("b.jsp");
      %>
      <a href="b.jsp">链接</a>
      <p><%=session.getAttribute("name")%></p>
      </body>
      </html>

      b.jsp

      <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <p><%=session.getAttribute("name")%></p>
      </body>
      </html>

      我们从以下几个方面分析session的作用域:

      • 直接访问index.jsp,可以输出zhangjia

      • 访问过index.jsp后再直接访问b.jsp,输出zhangjia

      • 通过index.jsp的a标签跳转到b.jsp,输出zhangjia

      • 通过index.jsp转发到b.jsp,输出zhangjia

      • 通过index.jsp重定向到b.jsp,输出zhangjia

      • 但是如果更换一个浏览器,直接访问b.jsp,输出null,但是在该浏览中访问一次index.jsp后,再访问b.jsp,就能正常输出了

      通过上面结果可以看出,session的作用域在一次会话。如果关闭浏览器,session中的数据便会丢失。

      五.  application

      index.jsp:

      <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <%
          session.setAttribute("name", "zhangjia");
      
      //    request.getRequestDispatcher("b.jsp").forward(request,response);
      
      //    response.sendRedirect("b.jsp");
      %>
      <a href="b.jsp">链接</a>
      <p><%=session.getAttribute("name")%></p>
      </body>
      </html>

      b.jsp

      <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <p><%=application.getAttribute("name")%></p>
      </body>
      </html>

      我们从以下几个方面分析application的作用域:

      • 直接访问index.jsp,可以输出zhangjia

      • 访问过index.jsp后再直接访问b.jsp,输出zhangjia

      • 通过index.jsp的a标签跳转到b.jsp,输出zhangjia

      • 通过index.jsp转发到b.jsp,输出zhangjia

      • 通过index.jsp重定向到b.jsp,输出zhangjia

      • 重启服务后,直接访问b.jsp,才会显示null

      • 除了重启,还可以使用removeAttribut方法来删除该数据。

      application的作用域在整个应用程序,服务器不重启,作用域就一直有效。

      山东省
    • 0
    • 0
    • 0
    • 1k
    • 请登录之后再进行评论

      登录

      赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: