JavaWeb-014-域对象的属性操作

  • 在application、session、request、pageContext对象中都可以调用setAttribute方法和getAttribute方法来设置和检索各自域范围内的属性。
  • 存储在application对象中的属性可以被同一个WEB应用程序中的所有Servlet和JSP页面访问。
  • 存储在session对象中的属性可以被属于同一个会话的所有Servlet和JSP页面访问。
  • 存储在request对象中的属性可以被属于同一个请求的所有Servlet和JSP页面访问,例如使用PageContext.forward和PageContext.include方法连接起来的多个Servlet和JSP页面。
  • 存储在pageContext对象中的属性仅可以被当前JSP页面的当前响应过程中调用的各个组件访问,例如,正在响应当前请求的JSP页面和它调用的各个自定义标签类。
  • PageContext类中还提供了对各个域范围的属性进行统一管理的方法,以简化对各个域范围内的属性的访问。

  • setAttribute方法

    • public void setAttribute(java.lang.String name,java.lang.Object value)
    • public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
  • 常量
    • PageContext.APPLICATION_SCOPE
    • PageContext.SESSION_SCOPE
    • PageContext.REQUEST_SCOPE
    • PageContext.PAGE_SCOPE
  • getAttribute方法
    • public java.lang.Object getAttribute(java.lang.String name)
    • public java.lang.Object getAttribute(java.lang.String name,int scope)
  • removeAttribute方法
    • public void removeAttribute(java.lang.String name)
    • public void removeAttribute(java.lang.String name,int scope)
  • getAttributeNamesInScope方法
  • findAttribute方法 (*)

测试代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
    </head>

    <body>
        <%--
            和属性相关的方法:
                1.方法:
                    1.1public Object    getAttribute(String name):获取相关属性
                    1.2.public java.util.Enumeration<E> getAttributeNames():获取属性名的Enumeration对象
                    1.3.public void setAttribute(String name, Object o):设置相关属性
                    1.4.public void  removeAttribute(String name):移除相关属性
                2.可以使用这些方法的对象(域对象):
                    2.1.pageContext:属性的作用范围仅限在当前的jsp页面
                    2.2.request:属性的作用范围仅限在同一个请求(一次刷新)
                    2.3.session:属性的作用范围仅限在一次会话(一次浏览器的打开到关闭,当然会话不失效  )
                    2.4.application:属性的作用范围是当前的web应用(范围最大,一次设置,在多处JSP或者Servlet中都能访问)
         --%>

         <%
                /*
                public void setAttribute(String name, Object o)
                存储此请求中的属性。在请求之间重置属性。此方法常常与 RequestDispatcher 一起使用。
                属性名称应遵守与包名称相同的命名约定。以 java.*、javax.* 和 com.sun.* 开头的名称保
                留给 Sun Microsystems 使用。
                如果传入的对象为 null,则效果将与调用 #removeAttribute 相同。
                警告,当通过 RequestDispatcher 从驻留在另一个 Web 应用程序中的 servlet 分发请求时,
                可能无法在调用者 servlet 中正确获取通过此方法设置的对象。
                name    指定属性名称的 String
                o           要存储的 Object
                */
                //1.设置属性(通过对应的隐含对象)
                    //PageContext pageContext
                    //可以从这里获取当前页面的几乎一切信息,包括另外8个对象
                pageContext.setAttribute("pageContextAttr", "pageContextValue");
                    //HttpServletRequest request        
                    //这个request就是前面学习的doXxx方法里面的request
                request.setAttribute("requestAttr", "requestValue");
                    //HttpSession session
                    //代表浏览器和服务器的一次会话
                session.setAttribute("sessionAttr", "sessionValue");
                    //ServletContext application
                    //代表了当前web应用。
                application.setAttribute("applicationAttr", "applicationValue");

            // 设置属性,通过pageContext统一管理(放到application)
            pageContext.setAttribute("test", "test", PageContext.APPLICATION_SCOPE);
         %>

         <%--
            public Object   getAttribute(String name)
            以 Object 形式返回指定属性的值,如果不存在给定名称的属性,则返回 null。
            可以以两种方式设置属性。servlet 容器可设置属性,使有关请求的自定义信息可用。
            例如,对于使用 HTTPS 发出的请求,可使用属性 javax.servlet.request.X509Certificate 
            获取有关客户端证书的信息。还可以使用 ServletRequest#setAttribute 以编程方式设置属性。
            这允许在调用 RequestDispatcher 之前将信息嵌入请求。
            属性名称应遵守与包名称相同的命名约定。此规范保留匹配 java.*、javax.* 和 sun.* 的名称。
            name    指定属性名称的 String
            return  包含属性值的 Object,如果属性不存在,则返回 null
          --%>
          <p1>jSP页面1</p1>
         <br />
         pageContextAttr:<%= pageContext.getAttribute("pageContextAttr") %>     <!--  pageContext:只能访问当前的属性-->
        <br />
        requestAttr:<%= request.getAttribute("requestAttr") %>
        <br />
        sessionAttr:<%= session.getAttribute("sessionAttr") %>
        <br />
        applicationAttr:<%=application.getAttribute("applicationAttr") %>
        <br />
        <!-- 通过PageContext统一取属性 -->
        test:<%= pageContext.getAttribute("test", PageContext.APPLICATION_SCOPE) %>
        <br />
        <a href="test1.jsp">去页面2</a>
        <br />
        <a href="testServlet">去Servlet</a>

    </body>
</html>

微信公众号:JavaWeb架构师


其它

  • 源码下载
关注下方公众号,回复:javaweb_course.code

完整教程PDF版本下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值