1: 监听器的定义

2:监听器的用途

3:实例

4:监听器分类

5:Servlet3.0下监听器的使用

6:实际项目常用的案例

1: 监听器的定义:

监听器实际上是一个类,这个类实现了特定的接口,然后将这个类在 web.xml 文件中进行描述,这样服务器在启动的时候就可以实例化这个类,启动监听器。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。例如统计用户在线人数。

web监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext,HttpSession,ServletRequest等域对象的创建、销毁、以及属性的变化等,可以在事件发生前、发生后进行一些处理。

2、监听器的用途

  • 1、统计在线人数和在线用户
  • 2、系统加载时进行信息的初始化工作
  • 3、统计网站的访问量
  • 4、跟Spring结合

3、实例

在web.xml文件中进行配置

listenr-class中是自己定义的Listener的类路径

public class MyRequestListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent event){
System.out.println("启动监听器");
} public void contextDestroy(ServletContextEvent event){
System.out.println("结束监听器");
}
}

编译器会为我们自动生成contextInitialized和contextDestroy两个函数

监听器>过滤器>serlvet,在 web.xml 文件中配置的时候注意顺序

4 监听器的分类

按监听的对象划分,可以分为监听

  • ServletContext对象
  • HttpSession对象
  • ServletRequest对象

按监听的事件划分

  • 域对象自身的创建和销毁
  • 域对象中属性的创建和消除
  • 绑定到session中的某个对象的状态

由于很多监听的方式一致,因此我们只考虑其中的HttpSession对象:

在web.xml中配置session超时

<session-config>
<session-timeout> 30 </session-timeout>
</session-config>

当超过30秒后,session会自动过期

public class MyRequestListener implements HttpSessionListener{
public void sessionCreate(HttpSessionEvent event){
System.out.println("event 创建:");
} public void sessionDestroy(HttpSessionEvent event){
System.out.println("event 销毁:");
}
}

另外,我们可以实现HttpSessionAttributeListener来实现session对象属性的增加(added)、删除(removed)、替换(replaced)的功能

public class MyRequestListener implements HttpSessionAttributeListener{
public void attributeAdded(HttpSessionBindEvent event){ } public void attributeRemoved(HttpSessionBindEvent event){ } public void attributeReplaced(HttpSessionBindEvent event){ }
}

5、Servlte3.0下的使用

在Servlet3.0下通过注解@WebListener("")就可以实现了,不需要在web.xml中进行配置

6、实战

public class MyRequestListener implements HttpSessionListener{
private int counts = 0;//用于统计在线人数
public void sessionCreate(HttpSessionEvent event){
counts++;
event.getSession().getServletContext.setAttribute("name",counts); //用户人数+1
} public void sessionDestroy(HttpSessionEvent event){
counts--;
event.getSession().getServletContext.setAttribute("name",counts);//用户人数-1
}
} @WebListener
public class MyRequestListener2 implements ServletRequestListener{
private ArrayList<User>list; //创建一个在线用户的列表
public void requestCreate(ServletRequestEvent event){
HttpServletRequest request = (HttpServletRequest) request.getServletContext();
String sessionId = request.getSession().getSessionId();
if(sessionId ...){
....
list.add(...);
}
} public void requestDestroy(ServletRequestEvent event){ }
} public class User{
private int sessionId; }

注意,以上代码只是大致的代码,并不全面和正确。

参考:java Web开发技术应用 - 监听器

Java 监听器的更多相关文章

  1. JAVA监听器原理

    http://blog.csdn.net/longyulu/article/details/25054697 JAVA监听器原理 标签: 监听器 2014-05-05 15:40 9070人阅读 评论 ...

  2. JAVA监听器Listener

    JAVA监听器Listener 一. 简介 监听器用于对web中内置对象的状态或者属性变化进行监听并做出相应响应的一种Servlet;在内置对象的生命周期中,产生.销毁等状态发生变化时,监听器就会进行 ...

  3. Java监听器Listener使用说明

    转载:http://blog.csdn.net/meng2602956882/article/details/13511587 1.什么是Java监听器 监听器也叫Listener,是Servlet的 ...

  4. Java监听器listener的介绍

    Java监听器listener的介绍 listener 能做什么 当web中某些动作发生之后,服务器就调用listener中对应的方法. 内部机制 接口回调 Web监听器 步骤 创建需要的监听器类,实 ...

  5. 自己编写一个Java监听器

    Java监听器 1.原理: 当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法. 例如:创建一个“人”类Class Person 人拥有吃的方法public void eat(){},我 ...

  6. Java监听器

    监听器 1.概念 监听器:主要是用来监听特定对象的创建,属性的变化的!,本质上却是一个实现特定接口的普通java类! 对象分为自己创建自己使用的,和别人创建自己用的,自己创建的不需要监听,值需要取监听 ...

  7. java监听器之实现在线人数显示

    在码农的世界里只有bug才能让人成长,The more bugs you encounter, the more efficient you will be! java中的监听器分为三种:Servle ...

  8. java监听器、定时器的使用

    1.监听器 在web.xml配置 <!-- 时间任务 --> <listener> <listener-class> com.hk.common.timer.Tim ...

  9. java监听器(Listener)学习笔记

    现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次, ...

随机推荐

  1. 为何重写toString方法后会使哈希码能够打印出来

    首先还是推荐lz看源代码 简单的讲之所以调用了toString()方法,不是什么编译器默认的,而是因为lz你调用的是out.print()方法仔细看源代码,在PringStream类中,print方法 ...

  2. (转)字符编码笔记:ASCII,Unicode和UTF-8

    字符编码笔记:ASCII,Unicode和UTF-8 访问地址:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

  3. div中嵌套div水平垂直居中

    div中嵌套一个居中的div有很多方法,如果不想调整边距,有一个简单的方法: <div align="center" style="width: 200px;hei ...

  4. 教你把UltraEdit如何注册激活教程及UltraEdit 22.0.0.48 官方中文版下载

    UltraEdit 22.0.0.48 官方中文版下载:链接: http://pan.baidu.com/s/1i3f7mZV 密码: r23v2015-5-30号更新 第一.关闭网络连接(或者直接拔 ...

  5. Eclipse4.6(Neon) + Tomcat8 + MAVEN3.3.9 + SVN项目完整环境搭建

    软件清单 jdk-8u102-windows-x64.exe eclipse-inst-win64.exe (Eclipse4.6 Neon) apache-tomcat-8.5.5-windows- ...

  6. 5.1 Intent

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent用于启动Activity, Service, 以及BroadcastReceiver三种组件, 同时还是组件之间通信 ...

  7. SQL到NOSQL的思维转变

    NOSQL系统一般都会宣传一个特性,那就是性能好,然后为什么呢?关系型数据库发展了这么多年,各种优化工作已经做得很深了,NOSQL系统一般都是吸收关系型数据库的技术,然后,到底是什么因素束缚了关系型数 ...

  8. Var To DataTable

    public static DataTable CopyToDataTable<T>(this IEnumerable<T> array) { var ret = new Da ...

  9. Python操作memcached及redis

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  10. 第八天:JS内置对象-Date日期对象

    1.Data对象 日期对象用于处理日期和时间 2.获取当日日期    代码如下: <!DOCTYPE html> <html lang="en"><h ...