定义

用于监听Web应用的内部事件的实现类。可以监听用户session的开始与结束,用户请求的到达等等,当事件发生时,会回调监听器的内部方法

使用Listener步骤

  1. 通过实现具体接口创建实现类(可实现多个监听器接口)
  2. 配置实现类成为监听器,有两种配置方式:
    1. 直接用@WebListener注解修饰实现类
    2. 通过web.xml方式配置,代码如下:
<listener><listener-class>com.zrgk.listener.MyListener</lisener-class>
</listener>

常用Web事件监听器接口

1. ServletContextListener

  1. 该接口用于监听Web应用的启动与关闭
  2. 该接口的两个方法:
    1. contextInitialized(ServletContextEvent event); // 启动web应用时调用
    2. contextDestroyed(ServletContextEvent event); // 关闭web应用时调用
  3. 如何获得application对象:
    ServletContext application = event.getServletContext();
  4. 示例
@WebListener
public class MyServetContextListener implements ServletContextListener{//web应用关闭时调用该方法@Overridepublic void contextDestroyed(ServletContextEvent event) {ServletContext application = event.getServletContext();String userName = application.getInitParameter("userName"); System.out.println("关闭web应用的用户名字为:"+userName);}//web应用启动时调用该方法@Overridepublic void contextInitialized(ServletContextEvent event) {ServletContext application = event.getServletContext();String userName = application.getInitParameter("userName");     System.out.println("启动web应用的用户名字为:"+userName);}}

2. ServletContextAttributeListener

  1. 该接口 用于监听ServletContext范围(application)内属性的改变。
  2. 该接口的两个方法:
    1. attributeAdded(ServletContextAttributeEvent event); // 当把一个属性存进application时触发
    2. attributeRemoved(ServletContextAttributeEvent event); // 当把一个属性从application删除时触发
    3. attributeReplaced(ServletContextAttributeEvent event); // 当替换application内的某个属性值时触发
  3. 如何获得application对象:
    ServletContext application = event.getServletContext();
  4. 示例

@WebListener
public class MyServletContextAttributeListener implements ServletContextAttributeListener{//向application范围内添加一个属性时触发@Overridepublic void attributeAdded(ServletContextAttributeEvent event) {String name = event.getName();//向application范围添加的属性名Object val = event.getValue();      //向application添加的属性对应的属性值System.out.println("向application范围内添加了属性名为:"+name+",属性值为:"+val+"的属性");}//删除属性时触发@Overridepublic void attributeRemoved(ServletContextAttributeEvent event) {// ...      }//替换属性值时触发@Overridepublic void attributeReplaced(ServletContextAttributeEvent event) {// ...      }}

3. ServletRequestListener与ServletRequestAttributeListener

  1. ServletRequestListener用于监听用户请求,而ServletRequestAttributeListener用于监听request范围内属性的变化。
  2. ServletRequestListener两个需要实现的方法
    1. requestInitialized(ServletRequestEvent event); //用户请求到达、被初始化时触发
    2. requestDestroyed(ServletRequestEvent event); // 用户请求结束、被销毁时触发
  3. ServletRequestAttributeListener两个需要实现的方法
    1. attributeAdded(ServletRequestAttributeEvent event); // 向request范围内添加属性时触发
    2. attributeRemoved(ServletRequestAttributeEvent event); // 从request范围内删除某个属性时触发
    3. attributeReplaced(ServletRequestAttributeEvent event); // 替换request范围内某个属性值时触发
  4. 获取reqeust对象
    HttpServletRequest req = (HttpServletRequest)event.getServletRequest();
  5. 代码片
@WebListener
public class MyRequestListener implements ServletRequestListener,ServletRequestAttributeListener{//用户请求结束、被销毁时触发@Overridepublic void requestDestroyed(ServletRequestEvent event) {HttpServletRequest req = (HttpServletRequest) event.getServletRequest();String ip = req.getRemoteAddr();System.out.println("IP为:"+ip+"的用户发送到"+req.getRequestURI()+"的请求结束");}//用户请求到达、被初始化时触发@Overridepublic void requestInitialized(ServletRequestEvent event) {HttpServletRequest req = (HttpServletRequest) event.getServletRequest();String ip = req.getRemoteAddr();System.out.println("IP为:"+ip+"的用户发送到"+req.getRequestURI()+"的请求被初始化");}//向request范围内添加属性时触发@Overridepublic void attributeAdded(ServletRequestAttributeEvent event) {String name = event.getName();Object val = event.getValue();System.out.println("向request范围内添加了名为:"+name+",值为:"+val+"的属性");}//删除request范围内某个属性时触发@Overridepublic void attributeRemoved(ServletRequestAttributeEvent event) {//...       }//替换request范围内某个属性值时触发@Overridepublic void attributeReplaced(ServletRequestAttributeEvent event) {// ...      }
}

4. HttpSessionListener与HttpSessionAttributeListener

  1. HttpSessionListener监听用户session的开始与结束,而HttpSessionAttributeListener监听HttpSession范围(session)内的属性的改变。
  2. HttpSessionListener要实现的方法:
    1. sessionCreated(HttpSessionEvent event); // 用户与服务器的会话开始、创建时触发
    2. sessionDestroyed(HttpSessionEvent event); // 用户与服务器的会话结束时触发
  3. HttpSessionAttributeListener要实现的方法:
    1. attributeAdded(HttpSessionBindingEvent event) ; // 向session范围内添加属性时触发
    2. attributeRemoved(HttpSessionBindingEvent event); // 删除session范围内某个属性时触发
    3. attributeReplaced(HttpSessionBindingEvent event); // 替换session范围内某个属性值时触发
  4. 如何得到session对象
    HttpSession session = event.getSession();
  5. 代码片
@WebListener
public class MySessionListener implements HttpSessionListener,HttpSessionAttributeListener {//建立session会话时触发@Overridepublic void sessionCreated(HttpSessionEvent event) {HttpSession session = event.getSession();String sessionId = session.getId();System.out.println("建立了会话,会话ID为:"+sessionId);}@Overridepublic void sessionDestroyed(HttpSessionEvent event) {// ...      }//向session范围内添加属性时触发@Overridepublic void attributeAdded(HttpSessionBindingEvent event) {String name = event.getName();Object val = event.getValue();System.out.println("向session范围内添加了名为:"+name+",值为:"+val+"的属性");}@Overridepublic void attributeRemoved(HttpSessionBindingEvent event) {// ...      }@Overridepublic void attributeReplaced(HttpSessionBindingEvent event) {// ...      }}

Java如何使用Listener相关推荐

  1. java监听器(Listener)统计在线人数

    使用java监听器统计在线人数 1. 监听器的简介 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法 ...

  2. Java中的Listener监听器与Ajax技术和Axios异步框架以及JSON传递接收数据

    Listener监听器与Ajax Listener 概念 Listener 表示监听器,是 JavaWeb 三大组件(Servlet.Filter.Listener)之一. 监听器可以监听就是在 ap ...

  3. java 自带thread分析工具_java自带的jvm分析工具

    这段时间觉得很有必要对java的内存分析工具进行熟悉,这样以后出现机器负载较高,或者反应很慢的时候,我就可以查找原因了.上网搜了搜,发现下面这些是比较常用的,然后我在机器上试试了,把结果也贴出来哈. ...

  4. Java并发编程73道面试题及答案——稳了

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户 ...

  5. 记一次Java多线程程序调试经历:HttpClient 死锁

    我自己写了一个爬虫程序,跑了半天后程序就卡死了,没有任何输出和动静. 先是使用jstatd和VisualVM,参考这篇文章:jstatd,VisualVM使用和报错解决 结果如下图: 看到内存毫无变化 ...

  6. Oracle数据库ORA-12516:“listener could not find available handler with matching protocol stack!“问题解决方法

    Oracle 数据库 sql 连接报错: java.sql.SQLException: Listener refused the connection with the following error ...

  7. Java并发编程75道面试题及答案

    1.在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User).任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bo ...

  8. ant编译java工程总结

    首先可以参考这两篇文章: dos下编译运行java工程: http://blog.csdn.net/lyhdream/article/details/17200445 dos下打包整个java工程: ...

  9. dos下打包整个java工程

    此篇文章首先参考: http://blog.csdn.net/lyhdream/article/details/17200445 我的java工程根目录为类容如下: 接下来我们删除掉.settings ...

最新文章

  1. 程序员的自我修养--链接、装载与库笔记:目标文件里有什么
  2. 在cmd的方式下,简化mysql的输入的方法
  3. 【c语言】蓝桥杯基础练习 数列特征
  4. Ubuntu 14.04下 Redis MongoDB安装及使用
  5. CCNP-16 OSPF试验12(BSCI)
  6. ConfigParser模块简明教程
  7. jvm的架构模型:基于栈式的架构和基于寄存器架构的特点
  8. 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
  9. ad20中怎么多选操作改层_在操作系统中CPU是怎么调度的
  10. Visual studio Code的C/C++开发环境搭建
  11. php 获取数据库函数吗,如何正确理解PHP获取显示数据库数据函数
  12. 拓端tecdat|采用SPSS Modeler的Web复杂网络对所有腧穴进行关联规则分析
  13. 创建数据库常用SQL语句
  14. python负数字符串转成_python 转字符
  15. IT资产管理流程及规范
  16. Nebula Graph - 基于Docker 安装 及 Studio
  17. linux u盘格式化失败怎么办,u盘无法完成格式化怎么办
  18. 【机器学习基础】泛化能力、过拟合、欠拟合、不收敛、奥卡姆剃刀原则
  19. 读 Charles Petzold 之《编码:隐匿在计算机软硬件背后的语言》
  20. 牛客寒假集训营 牛牛战队的比赛地

热门文章

  1. 【Flask】flask入门以及第一个flask项目的创建
  2. SocketAPI,CAsyncSocket,CSocket内幕及其用法
  3. 【筛素数】P1579 哥德巴赫猜想(升级版)
  4. [NPUCTF2020]Baby Obfuscation [HDCTF2019]MFC
  5. 某office前台任意文件上传漏洞分析
  6. 【Docker】记一次docker container ping domain 和 ping ipv6地址不通问题
  7. ACM入门之【线段树】
  8. 1074 Reversing Linked List (25 分)【难度: 一般 / 知识点: 链表】
  9. 【PAT乙级】1073 多选题常见计分法 (20 分)
  10. Spring boot配置Servlet容器