六、  Java Listener

1.  Java Listener 简介

* Java Listener  1. Java Listener(即:Java 监听器):用于监听 ServletRequest、HttpSession、ServletContext 作用域对象的创建、销毁、及其属性修改变化  2. 在 Web 项目中可以有多个 Java 监听器  3. 应用场景:       a.统计在线人数       b.统计页面访问量       c.服务器加载时数据初始化

* Listener 的使用  1. 在 web.xml 中配置监听器:       <listener>         <listener-class>com.ncdx.listener.MyListener</listener-class>       </listener>

  2. 创建 Java 类,根据需求实现相应的接口:       1)ServletRequestListener 接口 //声明了 ServletRequest 作用域对象的创建、销毁的监听方法       2)ServletRequestAttributeListener 接口 //声明了 ServletRequest 作用域对象中属性的添加、修改、删除的监听方法

       3)HttpSessionListener 接口 //声明了 HttpSession 作用域对象的创建、销毁的监听方法       4)HttpSessionAttributeListener 接口 //声明了 HttpSession 作用域对象中属性的添加、修改、删除的监听方法

       5)ServletContextListener 接口 //声明了 ServletContext 作用域对象的创建、销毁的监听方法       6)ServletContextAttributeListener 接口 //声明了 ServletContext 作用域对象中属性的添加、修改、删除的监听方法 

  3. 重写相应的监听方法
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MyListener implements ServletRequestListener,ServletRequestAttributeListener,
                                   HttpSessionListener,HttpSessionAttributeListener,
                                   ServletContextListener,ServletContextAttributeListener{

    @Override//监听request对象销毁
    public void requestDestroyed(ServletRequestEvent sre) {

    }

    @Override//监听request对象创建
    public void requestInitialized(ServletRequestEvent sre) {

    }

    @Override//监听request作用域数据的添加
    public void attributeAdded(ServletRequestAttributeEvent srae) {

    }

    @Override//监听request作用域数据的删除
    public void attributeRemoved(ServletRequestAttributeEvent srae) {

    }

    @Override//监听request作用域数据的修改
    public void attributeReplaced(ServletRequestAttributeEvent srae) {

    }

/*.....................................................................*/

    @Override//监听session对象的创建
    public void sessionCreated(HttpSessionEvent se) {

    }

    @Override//监听session对象的销毁
    public void sessionDestroyed(HttpSessionEvent se) {

    }

    @Override//监听session作用域数据的添加
    public void attributeAdded(HttpSessionBindingEvent se) {

    }

    @Override//监听session作用域数据的删除
    public void attributeRemoved(HttpSessionBindingEvent se) {

    }

    @Override//监听session作用域数据的更改
    public void attributeReplaced(HttpSessionBindingEvent se) {

    }

/*.........................................................................*/

    @Override//监听application对象销毁
    public void contextDestroyed(ServletContextEvent sce) {

    }

    @Override//监听application对象创建
    public void contextInitialized(ServletContextEvent sce) {

    }

    @Override//监听application作用域数据的添加
    public void attributeAdded(ServletContextAttributeEvent scae) {

    }

    @Override//监听application作用域数据的删除
    public void attributeRemoved(ServletContextAttributeEvent scae) {

    }

    @Override//监听application作用域数据的更改
    public void attributeReplaced(ServletContextAttributeEvent scae) {

    }

}

Listener

2.  Java 监听器的实例

/**
 * 模拟统计在线人数
 */

public class MyListener implements ServletRequestListener,ServletRequestAttributeListener,
                                   HttpSessionListener,HttpSessionAttributeListener,
                                   ServletContextListener,ServletContextAttributeListener{

    @Override
    public void contextInitialized(ServletContextEvent sce) {//在ServletContext对象中存储变量用来统计在线人数
        //获取ServletContext
        ServletContext sc = sce.getServletContext();
        //在ServletContext对象中存储变量并初始化
        sc.setAttribute("count", 0);
    }

    @Override
    public void sessionCreated(HttpSessionEvent se) {//session被创建时人数自增
        //获取SerevletContext对象
        ServletContext sc = se.getSession().getServletContext();
        //获取在线人数的变量
        int count = (int)sc.getAttribute("count");
        //存储
        sc.setAttribute("count", ++count);
        //显示在线人数
        System.out.println("目前在线人数:" + se.getSession().getServletContext().getAttribute("count"));
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {//session被销毁时人数自减
        //获取SerevletContext对象
        ServletContext sc = se.getSession().getServletContext();
        //获取在线统计人数的变量
        int count = (int)sc.getAttribute("count");
        //存储
        sc.setAttribute("count", --count);
        //显示在线人数
        System.out.println("目前在线人数:" + se.getSession().getServletContext().getAttribute("count"));
    }

}

Java Listener的更多相关文章

  1. Java Listener pattern 监听者模式

    Java Listener pattern 监听者模式 2016-5-12 监听者模式(观察者模式)能降低对象之间耦合程度.为两个相互依赖调用的类进行解耦. 便于进行模块化开发工作.不同模块的开发者可 ...

  2. java listener实现定时任务

    使用java ServletContextListener 实现各种简单定时任务. 1. 创建ServletContextListener,在3.0版本的web.xml中不再需要添加listener的 ...

  3. Java ---Listener监听器

    在我们的web容器中,一直不断的触发着各种事件,例如:web应用启动和关闭,request请求到达和结束等.但是这些事件通常对于开发者来说是透明的,我们可以根据这些接口开发符合我们自身需求的功能.在w ...

  4. Java Listener中Spring接口注入的使用

    在项目中使用Spring通常使用他的依赖注入可以很好的处理,接口与实现类之间的耦合性,但是通常的应用场景中都是Service层和DAO层,或者web层的话, 也是与Strust2来整合,那么如何在Li ...

  5. JavaWeb Listener

    1. 监听器概述 1.1. 什么是监听器 做过Swing或者AWT图像界面Java程序开发的话,应该对Listener与Event非常熟悉.Swing或者AWT中通过Listener与Event来处理 ...

  6. Android5.1图库Gallery2代码分析数据加载流程

    图片数据加载流程. Gallery---->GalleryActivity------>AlbumSetPage------->AlbumPage--------->Photo ...

  7. 使用Mongodb+Shiro+SpringMVC实现动态权限分配

    此次的文档只对Mongodb整合Shiro并且实现动态权限分配做整理,其它的内容以后会补上. 第一步.创建在web.xml中配置 Spring .Shiro shiroFilter 过滤器是用来将请求 ...

  8. Spring boot 实现高吞吐量异步处理(适用于高并发场景)

    技术要点 org.springframework.web.context.request.async.DeferredResult<T> 示例如下: 1.   新建Maven项目  asy ...

  9. Spring boot 集成Kafka

    搭建Kafka集群,参考: https://www.cnblogs.com/jonban/p/kafka.html 源码示例如下: 1.新建 Maven 项目 kafka 2.pom.xml < ...

随机推荐

  1. Flutter中的基础组件之一

    一.Text文本组件(单一格式的文本) 是具有单一风格的文本字符串,可以跨多行显示,也可全部显示在同一行中,具体显示样子,取决于布局约束. 常用属性: 1.overflow : TextOverflo ...

  2. Java异步调用转同步的5种方式

    1.异步和同步的概念 同步调用:调用方在调用过程中,持续等待返回结果. 异步调用:调用方在调用过程中,不直接等待返回结果,而是执行其他任务,结果返回形式通常为回调函数. 2 .异步转为同步的概率 需要 ...

  3. c++学习笔记_6

    前言:本笔记所对应的课程为中国大学mooc中北京大学的程序设计与算法(三)C++面向对象程序设计,主要供自己复习使用,且本笔记建立在会使用c和java的基础上,只针对与c和java的不同来写 多态 虚 ...

  4. c语言ARP应用

    对于windows环境,winsock不能用来发ARP请求: 发表于: 2002-04-23 11:45:12 arp是请求硬件地址的.winsock层次太高啦... 用winsock中的sendto ...

  5. eNSP——配置通过FTP进行文件操作

    原理: FTP (File Transfer Protocol,文件传输协议)是在TCP/IP网络和Internet.上最早使用的协议之-,在TCP/IP协议族中属于应用层协议,是文件传输的Inter ...

  6. 学习笔记:CentOS7学习之二十三: 跳出循环-shift参数左移-函数的使用

    目录 学习笔记:CentOS7学习之二十三: 跳出循环-shift参数左移-函数的使用 23.1 跳出循环 23.1.1 break和continue 23.2 Shift参数左移指令 23.3 函数 ...

  7. oracle索引2

    问什么问题? 索引有什么代价?哪些场景下你需要建索引?或者有时候反过来问,哪些场景下不推荐建索引. 建好索引之后,怎么才能最高效地利用索引?或者反过来问,请说出一个无法有效利用已建索引的案例. 索引的 ...

  8. jQuery报错:Uncaught TypeError: _this.attr is not a function

    问题:想通过延时把置灰的按钮再次复原,代码如下: $("#sendEmailCode").on("click", function() { var _this ...

  9. PHP学习之PHP trait解析

    自PHP5.4.0起,PHP实现了一种代码复用的方法,称为trait. 众所周知,PHP中是单继承的,trait是为类似PHP的单继承语言而准备得一种代码复用机制.trait为了减少单继承语言的限制, ...

  10. k8s之网络插件flannel及基于Calico的网络策略

    1.k8s网络通信 a.容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现; b.pod之间的通信:pod ip <---> pod ip,pod和pod之间不经过任何转换即可 ...