欢迎光临
一个有态度、有温度的分享型博客

Java监听器的简单使用

监听器在Java开发过程中发挥着重要作用,我们经常需要在系统刚一启动就要执行某些任务或进行某些操作,还有在统计当前在线用户数目时也需要使用监听器,因此有必要了解一下Java中监听器的使用过程和原理。

什么是Java监听器?

Java监听器就是一个程序,一个实现了特定接口的程序。

Java监听器的作用?

Java中监听器用于监听一个Java对象的方法调用或者属性的改变;当被监听的对象的某个方法被调用或者某个属性发生改变的时候,监听器中的某个方法就会被立即执行。

Java监听器简介

常用的监听器接口分为三类,分别是:

1.对Servlet上下文进行监听(Application级)

用于监听ServletContext对象的创建和删除以及属性的添加、删除、修改等操作,该监听器需要用到如下两个接口类:

(1)ServletContextAttributeListener

用于监听ServletContext(application)范围内属性的变化,实现该接口的监听器需要实现如下三个方法:

①attributeAdded(ServletContextAttributeEvent event):当程序把一个属性存入application范围时触发该方法;
②attributeRemoved(ServletContextAttributeEvent event):当程序把一个属性从application范围删除时触发该方法;
③attributeReplaced(ServletContextAttributeEvent event):当程序替换application范围内的属性时将触发该方法;

(2)ServletContextListener

当你需要在处理任何客户端请求之前进行某个操作,并且希望在整个应用过程中该操作一直可用,此时ServletContextListener接口将会起到作用,实现该接口的监听器需要实现的方法有:

①contextInitialized(ServletContextEvent event):当创建ServletContext时,激发该方法
②contextDestroyed(ServletContextEvent event):当销毁ServletContext时,激发该方法

2.对HTTP会话进行监听(Session级)

用于监听HTTP会话活动情况和HTTP会话中属性设置情况:包括session的创建和销毁,session中属性的增加、删除、修改等操作,也可以监听HTTP会话的active和passivate情况等,HTTP Session级的接口主要有:

(1)HttpSessionAttributeListener

该接口用于监听HttpSession(session)范围内属性的改变,实现该接口需要实现的方法有:

①attributeAdded(HttpSessionBindingEvent event):当在session中添加对象时触发此操作;
②attributeRemoved(HttpSessionBindingEvent event):当在session中删除对象时触发此操作;
③attributeReplaced(HttpSessionBindingEvent event):当在session中修改对象时触发此操作;

(2)HttpSessionListener

该接口用于监听session的创建和销毁过程,实现该接口的监听器需要实现的方法有:

①sessionCreated(HttpSessionEvent event):用户与服务器的会话开始、创建时时触发该方法 ;
②sessionDestroyed(HttpSessionEvent event):用户与服务器的会话断开、销毁时触发该方法 ;

(3)HttpSessionActivationListener

实现了HttpSessionActivationListener接口的JavaBean对象可以感知自己被活化和钝化的事件,主要方法有:

①sessionDidActive(HttpSessionBindingEvent event):当绑定到HttpSession对象中的对象将要随HttpSession对象被活化之后,web服务器调用该对象的此方法;
②sessionWillPassivate(HttpSessionBindingEvent event):当绑定到HttpSession对象中的对象将要随HttpSession对象被钝化之前,web服务器调用该对象的此方法;

(4)HttpSessionBindingListener

实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被绑定到Session中和从Session中删除的事件

①valueBound(HttpSessionBindingEvent event):当对象被绑定到HttpSession对象中时,web服务器调用该对象的此方法,从而对象被设置到session中;
②valueUnbound(HttpSessionBindingEvent event):当对象从HttpSession对象中解除绑定时,web服务器调用该对象的此方法,从而对象从session中被移除;

「说明」:一般情况下,HttpSessionActivationListener和HttpSessionBindingListener一起使用,这两个监听器比较特殊,实现这两个接口的类不需要在web.xml中进行注册,被钝化的JavaBean对象会被持久化到存储设备中,活化的JavaBean对象会被从存储设备中恢复,前提是该JavaBean对象实现了Serializable接口。

3.对客户端请求进行监听(request级)

用于监听用户的请求和request范围内属性的变化,该监听器需要实现的接口主要有:

(1)ServletRequestAttributeListener

用于监听request范围内属性的变化,实现该接口需要实现的方法有:

①attributeAdded(ServletRequestAttributeEvent event):当程序向request范围内添加属性时触发该方法
②attributeRemoved(ServletRequestAttributeEvent event):当程序在request范围内删除属性时触发该方法
③attributeReplaced(ServletRequestAttributeEvent event):当程序在request范围内的属性被替换或修改时触发该方法

(2)ServletRequestListener

①requestInitialized(ServletRequestEvent event):用户请求到达、被初始化时触发该方法;
②requestDestroyed(ServletRequestEvent sre):用户请求结束、被销毁时触发该方法。

Java监听器原理

监听器原理示意图

Java监听器示例

监听器一般需要在web.xml中进行注册,如:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <display-name>监听器Demo</display-name>
    <listener>
        <listener-class>demo.MyServletContextListener</listener-class>
    </listener>
</web-app>

Java代码如下:

package demo;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
 * @author https://www.rxblog.xyz
 *
 */
public class MyServletContextListener implements ServletContextListener {
    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("----------------会话销毁---------------------");
    }
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("-----------------会话创建------------------");
    }
}

PS:完整代码下载地址:点我下载

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址