zoukankan      html  css  js  c++  java
  • 监听器

    1. 监听器

    1.1    概述

    监听器: 主要是用来监听特定对象的创建或销毁、属性的变化的!

                       是一个实现特定接口的普通java类!

    对象:

             自己创建自己用 (不用监听)

             别人创建自己用 (需要监听)

    Servlet中哪些对象需要监听?

             request / session / servletContext

             分别对应的是request监听器、session相关监听器、servletContext监听器

    监听器(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序列化及反序列化的事件

    404(路径写错)

    500(服务器错误,调试)

    1.2    生命周期监听器

    声明周期监听器: 监听对象的创建、销毁的过程!

    监听器开发步骤:

    1. 写一个普通java类,实现相关接口;
    2. 配置(web.xml)

    A.    ServletRequestListener   

    监听request对象的创建或销毁。

    代码:

    /**
     *  监听request对象的创建或销毁
     * @author Jie.Yuan
     *
     */
    public class MyRequestListener implements ServletRequestListener{
    
        // 对象销毁
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            // 获取request中存放的数据
            Object obj = sre.getServletRequest().getAttribute("cn");
            System.out.println(obj);
            System.out.println("MyRequestListener.requestDestroyed()");
        }
    
        // 对象创建
        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            System.out.println("MyRequestListener.requestInitialized()");
        }
    }
    Web.xml
    <!-- 监听request对象创建、销毁 -->
        <listener>
            <listener-class>cn.itcast.a_life.MyRequestListener</listener-class>
        </listener>

    A.   HttpSessionListener

    监听session对象的创建或销毁。

    B.   ServletContextListener

    监听servletContext对象的创建或销毁。

    1.1    属性监听器

    监听:request/session/servletContext对象属性的变化!

    ServletRequestAttributeListener

    HttpSessionAttributeListener

    ServletContextAttributeListener

    总结:先写类,实现接口;  再配置

    1.4 其他监听器: session相关监听器

    HttpSessionBindingListener  

    监听对象绑定/解除绑定到sesison上的事件!

    步骤:

             对象实现接口; 再把对象绑定/解除绑定到session上就会触发监听代码。

    作用:

             (上线提醒!)

    /**
     * 监听此对象绑定到session上的过程,需要实现session特定接口
     * @author Jie.Yuan
     *
     */
    public class Admin implements HttpSessionBindingListener {
       … 省略get/set
    // 对象放入session
        @Override
        public void valueBound(HttpSessionBindingEvent event) {
            System.out.println("Admin对象已经放入session");
        }
        // 对象从session中移除
        @Override
        public void valueUnbound(HttpSessionBindingEvent event) {
            System.out.println("Admin对象从session中移除!");
        }
    }

    思考:

             这个session监听器,和上面的声明周期、属性监听器区别?

             --à 不用再web.xml配置

       -à 因为监听的对象是自己创建的对象,不是服务器对象!

    1.1    案例

    需求:做一个在线列表提醒的功能!

          用户--à 登陆

                            ---à 显示登陆信息,列表展示。(list.jsp)

                                          --à  显示在线用户列表        (list.jsp)

                                                -à 列表点击进入“在线列表页面”   onlineuser.jsp

    实现:

    1. 1.      先增加退出功能;  再把session活跃时间1min;
    2. 2.      写监听器,监听servletContext对象的创建: 初始化集合(onlineuserlist)
    3. 3.      登陆功能: 用户登陆时候,把数据保存到servletContext
    4. 4.      List.jsp  增加超链接, 点击时候提交直接跳转到online.jsp
    5. 5.      写监听器: 监听session销毁,把当前登陆用户从onlineuserlist移除!
    author@nohert
  • 相关阅读:
    select查询语句
    springboot的热部署
    springboot入门
    java学习之Semaphore信号量
    Java学习之自定义线程池
    java学习之生产者消费者模式
    sql通过其中一个字段计算另一个字段的值
    activeMq用mysql实现持久化方式
    idea创建Hystrix入门实例
    idea创建Eureka Server入门实例
  • 原文地址:https://www.cnblogs.com/gzgBlog/p/13836031.html
Copyright © 2011-2022 走看看