六、  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. windows7-jdk配置

    这里主要讲这么配置环境变量 1.下载jdk安装程序,一直下一步就行了,安装完成 2.添加环境变量 JAVA_HOME 如:C:\Program Files\Java\jdk1.7.0_80 CLASS ...

  2. 数字麦克风PDM信号采集与STM32 I2S接口应用--笔记目录

    数字麦克风采用MEMS技术,将声波信号转换为数字采样信号,由单芯片实现采样量化编码,一般而言数字麦克风的输出有PDM麦克风和PCM麦克风,由于PDM麦克风结构.工艺简单而大量应用,在使用中要注意这二者 ...

  3. 《你必须知道的495个C语言问题》读书笔记之第15-20章:浮点数、风格、杂项

    一.可变参数列表 1. Q:为什么调用printf前必须要包含<stdio.h>? A:为了把printf的正确原型说明引入作用域.例如,如果可变参数的调用比固定参数的调用效率低,编译器就 ...

  4. [转帖CCIX]

    业界七巨头联手,数据中心通过PCIe实现25Gbps数据通信! 2017-06-07 17:31 CCIX(Cache Coherent Interconnect for Accelerators,针 ...

  5. Oracle学习记录(一)

    一.Oracle历史 于1977年拉里埃里森和他三个朋友成立了软件研发公司,并在之后给中央情报局开发了命名为Oracle而出名,并在之后将公司名改为Oracle.1989年以甲骨文命名进入中国. Or ...

  6. SQL Server数据库语法(一)

    --创建数据库 DB_CYITcreate database DB_CYITON(name='DB_CYIT',--主文件逻辑名称filename='G:\data\DB_CYIT.mdf', --文 ...

  7. sql数据库的基础语句

    1, 创建数据库 create database database-name 2, 删除数据库 drop database dbname 3, 备份sql server 创建 备份数据的device ...

  8. php常用扩展有哪些

    bcmath(精确数值处理) bz2 calendar Core ctype curl date dom ereg exif fileinfo filter ftp gettext hash icon ...

  9. Python基础 第四章 字典(1)

    通过名称来访问其各个值的数据结构,映射(mapping). 字典,是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下.(键,可能是数.字符串.元组). 1.1 字典由 键 及其相 ...

  10. MyBatis 源码篇-插件模块

    本章主要描述 MyBatis 插件模块的原理,从以下两点出发: MyBatis 是如何加载插件配置的? MyBatis 是如何实现用户使用自定义拦截器对 SQL 语句执行过程中的某一点进行拦截的? 示 ...