• Java-Web监听器


    在WEB端实现监听实质:

      实现一系列的监听接口(实现相应的接口,覆写各接口中相应的方法,在相应的事件触发的时候会执行自己的监听器中的覆写的方法,在各个方法中完成自己想要的操作,从而实现了监听)

      监听--就是在进行某种各个范围(application,session,request)中有相关值的设置、修改、替换的时候,这些操作都会触发事件,而Java中事件的代理机制,事件处理是利用listener机制,所以为了在事件触发的时候能够使自己能够采取相应的措施,就需要---->继承这样的listener,在listener中覆写相应的方法,覆写相应的事件处理方法,在对应的方法中处理对应的事件,也就是进行了监听(网上总结的特别好的)

      总结:主要是用来监听特定对象的创建或销毁、属性的变化,需要实现特定接口的普通类。

    相关的接口

    一、监听对象创建/销毁的监听器接口

             Interface ServletRequestListener    监听request对象的创建或销毁

             Interface HttpSessionListener        监听session对象的创建或销毁

             Interface ServletContextListener     监听servletContext对象的创建或销毁

    二、监听对象属性的变化

             Interface ServletRequestAttributeListener 监听request对象属性变化: 添加、移除、修改

             Interface HttpSessionAttributeListener    监听session对象属性变化: 添加、移除、修改

       Interface ServletContextAttributeListener  监听servletContext对象属性变化

    三、session相关监听器

             Interface HttpSessionBindingListener   监听对象绑定到session上的事件     

          Interface HttpSessionActivationListener  监听session序列化及反序列化的事件


     生命周期

    监听器的使用步骤

    1、写一个普通的java类,实现先关接口

    2、部署xml文件

    A、ServletRequestListener(在sevlet中的service方法传入的参数是ServletRequest,在HttpServlet中将其强制转型了,所以没有HttpServletRequestListener相关接口,使用最基本的ServletRequest)

     

    创建对应的实现类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    package comgqx.a_life;
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    /**
     * 监听request对象的创建和销毁
     * @author Administrator
     */
    public class MyRequestListener implements ServletRequestListener{
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            // TODO Auto-generated method stub
            //获取request中的存放的数据
            Object obj=sre.getServletRequest().getAttribute("cn");
            System.out.println(obj);
            System.out.println("MyRequestListener.requestDestoryed()");
        }
        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            // TODO Auto-generated method stub
            //获取request中的存放的数据
                    Object obj=sre.getServletRequest().getAttribute("cn");
                    System.out.println(obj+"hhhhh");
            System.out.println("MyRequestListener.requestInitialized()");
        }
    }

    session对象在强制关闭浏览器的时候,不算是session对象的销毁,只能说是不能用了,所以不会触发销毁事件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package comgqx.a_life;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    public class MySessionListener implements HttpSessionListener{
        //创建销毁
        @Override
        public void sessionCreated(HttpSessionEvent se) {
            // TODO Auto-generated method stub
            System.out.println("MySessionListener.sessionCreated()");
        }
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            // TODO Auto-generated method stub
            System.out.println("MySessionListener.sessionDestroyed()");
        }
    }

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package comgqx.a_life;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    public class MyServletListener implements ServletContextListener{
        //一般在服务器启动的时候创建,服务器关闭后销毁,用的相对比较多
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            // TODO Auto-generated method stub
            System.out.println("MyServletListener.contextDestroyed()");
        }
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            // TODO Auto-generated method stub
            System.out.println("1........MyServletListener.contextInitialized");
        }
    } 

    写好配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!-- 监听request对象的创建 -->
     <listener>
       <listener-class>comgqx.a_life.MyRequestListener</listener-class>
     </listener>
     <!-- 监听servletContext对象的创建 -->
     <listener>
       <listener-class>comgqx.a_life.MyServletListener</listener-class>
     </listener>
     <!-- 监听session对象的创建 -->
     <listener>
       <listener-class>comgqx.a_life.MySessionListener</listener-class>
     </listener>

    写一个jsp来试验

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'index.jsp' starting page</title>
      </head>
       
      <body>
        i am coming!
        <%request.setAttribute("cn""china");
          session.invalidate(); //销毁session(session默认最大活跃时间是30分钟)
        %>
      </body>
    </html>

    在启动服务器的时候会看到servlet对象的创建

    然后通过jsp去访问,控制台如下显示

  • 相关阅读:
    优秀IT技术文章集(最新)(高质量)
    大型网站系统架构演化之路
    一起学Maven
    Drupal8 新建第一个模块
    理解依赖注入(Dependency Injection)
    Yii2 模块module笔记
    Drupal views 学习之筛选器
    Drupal views 学习之初识
    Drupal views 中合并显示字段
    解读python手册的例子a, b = b, a+b
  • 原文地址:https://www.cnblogs.com/zhangyubao/p/6973789.html
Copyright © 2020-2023  润新知