zoukankan      html  css  js  c++  java
  • [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

    内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

    本人互联网技术爱好者,互联网技术发烧友

    微博:伊直都在0221

    QQ:951226918

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    1.域对象中属性的变更的事件监听器( 三个很少被使用 )

      1)域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器

      2)这三个监听器接口分别是  ServletContextAttributeListener  ,   HttpSessionAttributeListener   和  ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同

      3)当向被监听器对象中增加一个属性时,web容器就调用事件监听器的 attributeAdded 方法进行相应,这个方法接受一个事件类型的参数,监听器可以通过这个参数来获得正在增加属性的域对象和被保存到域中的属性对象

      4)各个域属性监听器中的完整语法定义为:

          public void attributeAdded(ServletContextAttributeEvent scae)

          public void attributeReplaced(HttpSessionBindingEvent hsbe)

          public void attributeRmoved(ServletRequestAttributeEvent srae)

       

    以request 为例子做测试

    TestAttribute.java

     1 package com.jason.listener;
     2 
     3 import javax.servlet.ServletContextAttributeEvent;
     4 import javax.servlet.ServletContextAttributeListener;
     5 import javax.servlet.ServletContextListener;
     6 import javax.servlet.ServletRequestAttributeEvent;
     7 import javax.servlet.ServletRequestAttributeListener;
     8 import javax.servlet.ServletRequestListener;
     9 import javax.servlet.http.HttpSessionAttributeListener;
    10 import javax.servlet.http.HttpSessionBindingEvent;
    11 
    12 /**
    13  * 
    14  * @ClassName:TestAttribute
    15  * @Description:TODO
    16  * @author: jason_zhangz@163.com
    17  * @date:2016年7月17日下午9:44:56
    18  * 
    19  *
    20  */
    21 public class TestAttribute implements ServletContextAttributeListener, ServletRequestAttributeListener
    22         ,HttpSessionAttributeListener{
    23 
    24     @Override
    25     public void attributeAdded(HttpSessionBindingEvent se) {
    26         // TODO Auto-generated method stub
    27         
    28     }
    29 
    30     @Override
    31     public void attributeRemoved(HttpSessionBindingEvent se) {
    32         // TODO Auto-generated method stub
    33         
    34     }
    35 
    36     @Override
    37     public void attributeReplaced(HttpSessionBindingEvent se) {
    38         // TODO Auto-generated method stub
    39         
    40     }
    41 
    42     @Override
    43     public void attributeAdded(ServletRequestAttributeEvent srae) {
    44         // TODO Auto-generated method stub
    45         System.out.println("向 request 中添加了一个 属性 ... ");
    46     }
    47 
    48     @Override
    49     public void attributeRemoved(ServletRequestAttributeEvent srae) {
    50         // TODO Auto-generated method stub
    51         System.out.println("从 request 中移除了一个属性 ... ");
    52         
    53     }
    54 
    55     @Override
    56     public void attributeReplaced(ServletRequestAttributeEvent srae) {
    57         // TODO Auto-generated method stub
    58         System.out.println("从request 中置换了属性 ...");
    59         
    60     }
    61 
    62     @Override
    63     public void attributeAdded(ServletContextAttributeEvent scae) {
    64         // TODO Auto-generated method stub
    65         
    66     }
    67 
    68     @Override
    69     public void attributeRemoved(ServletContextAttributeEvent scae) {
    70         // TODO Auto-generated method stub
    71         
    72     }
    73 
    74     @Override
    75     public void attributeReplaced(ServletContextAttributeEvent scae) {
    76         // TODO Auto-generated method stub
    77         
    78     }
    79     
    80     
    81 
    82 }

     

    web.xml

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    3   
    4   <!-- 配置listener -->
    5 
    6   <listener>
    7       <listener-class>com.jason.listener.TestAttribute</listener-class>
    8   </listener>
    9 /web-app>

    test-attribute-listener.jsp

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <%
    11         request.setAttribute("name", "jason");
    12          System.out.println("--------------------------------------------------");
    13          request.setAttribute("name", "zhang");
    14          System.out.println("--------------------------------------------------");
    15          request.removeAttribute("name");
    16          System.out.println("--------------------------------------------------");
    17     %>
    18 
    19 </body>
    20 </html>

    2.感知 Session 绑定的事件监听器( 使用较少

     > 保存在 Session 域中的对象可以有多种状态:

      1)绑定到  Session 中;从 Session 域中解除绑定

      2)随 Session 对象持久化到一个存储设备中;随 Session 对象从一个存储设备中恢复

     >Servlet 规范中定义了两个特殊的监听器接口来帮助  JavaBean  对象了解自己在 Session 域中的这些状态:HttpSessionBindingListener接口  和  HttpSessionActivationListener接口 ,实现这两个接口的类不需要 web.xml 文件中进行注册

     

     2.1 HttpSessionBindingListener接口:监听实现了该接口的 Java 类的对象 绑定到 session 或从 session 中解除绑定事件

       ① 实现了HttpSessionBindingListener接口的 JavaBean 对象可以感知自己被绑定到 Session 中和从 Session 中删除的事件

       ② 当对象被绑定到 HttpSession 对象中时,web 服务器调用该对象的 void valueBound(HttpSessionBindingEvent event) 方法

       ③ 当对象从 HttpSession 对象中解除绑定时,web 服务器调用该对象的 void valueUnbound(HttpSessionBindingEvent event)方法

    HttpSessionBindingListener.jsp

     1 <%@page import="com.jason.listener.user"%>
     2 <%@ page language="java" contentType="text/html; charset=UTF-8"
     3     pageEncoding="UTF-8"%>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>Insert title here</title>
     9 </head>
    10 <body>
    11     <h3>HttpSessionBindingListener</h3>
    12     <%
    13         user usr = new user();
    14         session.setAttribute("user", usr);
    15         
    16         System.out.println("---------------------");
    17         
    18         session.removeAttribute("user");
    19     %>
    20 
    21 </body>
    22 </html>

    user.java

     1 package com.jason.listener;
     2 
     3 import javax.servlet.http.HttpSessionBindingEvent;
     4 import javax.servlet.http.HttpSessionBindingListener;
     5 
     6 public class user implements HttpSessionBindingListener {
     7 
     8     @Override
     9     public void valueBound(HttpSessionBindingEvent event) {
    10         // TODO Auto-generated method stub
    11         System.out.println("绑定到session ");
    12     }
    13 
    14     @Override
    15     public void valueUnbound(HttpSessionBindingEvent event) {
    16         // TODO Auto-generated method stub
    17         System.out.println("从session 中解除绑定");
    18     }
    19 
    20     
    21 }

       2.2 HttpSessionActivationListener接口(不常用)

        1)实现了HttpSessionBindingListener接口的 JavaBean 对象可以感知自己被活化和钝化的事件

          2)当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被钝化之前,web 服务器调用该对象的  void sessionWillPassivate(HttpSessionBindingEvent event) 方法

        3)当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被活化之后,web 服务器调用该对象的 void sessionDidActive(HttpSessionBindingEvent event)方法

     

  • 相关阅读:
    golang删除数组某个元素
    golang用通道实现信号量,控制并发个数
    什么是ScaleIO中的forwards rebuild和backwards rebuild?
    SQL Server中的database checkpoint
    如何将thick provision lazy zeroed的VMDK文件转换为thick provision eager zeroed?
    LoadTestAgentResultsLateException in VS2010
    SQL Server Instance无法启动了, 因为TempDB所在的分区没有了, 怎么办?
    VMware vCenter中, 如何辩认虚机上Raw Device Mapping过了的一块物理磁盘?
    SQL Server AlwaysOn Setup Step-By-Step Guide
    TPC-E在populate测试Database时需要注意的一些事项
  • 原文地址:https://www.cnblogs.com/jasonHome/p/5679170.html
Copyright © 2011-2022 走看看