Listener监听器

监听器

监听器的基本的介绍

监听器就是第三种Servlet,叫做监听的Servlet,主要负责监听web程序执行的各个过程,当相关的被监听事件执行之后,监听器会自动执行,在web中可以对application、request和session三种操作进行监听,比如服务的启动和关闭,session域对象的设置和取消,request域对象的设置和取消,request请求等等都可以被监听。监听的实现主要是依靠各种监听接口完成。

对application的监听

对于application监听
实际上就是对ServletContext的监听
主要的监听接口有两个:

  • ServletContextListener:对服务器的关闭和启动进行监听
  • ServletContextAttributeListener:对application设置的域对象信息监听

对服务器的启动和关闭进行监听

主要方法有两个:

  • void contextInitialized(ServletContextEvent sce):监听服务器的启动
  • void contextDestroyed(ServletContextEvent sce):监听服务器的关闭
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;

    public class WebServletContextListener implements ServletContextListener {

    //监听服务器的关闭
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    System.out.println("tomcat 关闭了");
    }
    //监听服务器的启动
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
    System.out.println("tomcat 启动了");
    }
    }

监听器要运行的话,必须和Servlet或者Filter一样,需要进行配置到Web工程中,配置方式也有两种:

  • 配置web.xml文件
  • 通过注解的方式完成配置

第一种配置:

1
2
3
4
<!-- 配置监听器 -->
<listener>
<listener-class>com.wanbangee.listener.WebServletContextListener</listener-class>
</listener>

第二种方式:

1
@WebListener

启动tomcat的过程中执行了监听器中监听服务器启动的方法,关闭服务器的时候,执行了监听服务器关闭的方法。

对application范围域对象进行监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@WebListener
public class WebServletContextAttributeListener implements ServletContextAttributeListener {
/*
* 比如修改:event获取的是修改前的信息
* 比如删除:event获取的是删除前的信息
*
* */

//监听application访问的域对象的设置
public void attributeAdded(ServletContextAttributeEvent event) {
System.out.println("设置了application域对象的信息");
System.out.println("设置域对象的名称:"+event.getName());
System.out.println("设置域对象的值:"+event.getValue());
}
//监听application访问的域对象的移除
public void attributeRemoved(ServletContextAttributeEvent event) {
System.out.println("移除了application域对象的信息");
System.out.println("移除域对象的名称:"+event.getName());
System.out.println("移除域对象的值:"+event.getValue());
}
//监听application访问的域对象的修改
public void attributeReplaced(ServletContextAttributeEvent event) {
System.out.println("修改了application域对象的信息");
System.out.println("修改域对象的名称:"+event.getName());
System.out.println("修改域对象的值:"+event.getValue());
}

}

对session的监听

对session的监听常用的监听接口有两个:

监听session的创建和session的销毁

监听接口为HttpSessionListener,方法有:

  • 监听session的创建 : sessionCreate()
  • 监听session的销毁 : sessionDestoryed()

监听session域对象信息的设置、修改和删除

监听接口为HttpSessionAttributeListener,方法有:

  • 监听session域对象的设置:attributeAdded()
  • 监听session域对象的修改:attributeReplaced()
  • 监听session域对象的删除:attributeRemoved()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
* Application Lifecycle Listener implementation class WebSessionListener
*/
@WebListener
public class WebSessionListener implements HttpSessionListener, HttpSessionAttributeListener {

//监听session创建
public void sessionCreated(HttpSessionEvent event) {
System.out.println("浏览器连接到了服务器。。。");
}
//监听session的销毁
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("session 失效了");
}
//监听session域对象的设置
public void attributeAdded(HttpSessionBindingEvent event) {
System.out.println("session域对象设置了");
System.out.println("session属性的名称:" + event.getName());
System.out.println("session属性的值:" + event.getValue());
}
//监听session域对象的移除
public void attributeRemoved(HttpSessionBindingEvent event) {
System.out.println("session域对象移除了");
System.out.println("session属性的名称:" + event.getName());
System.out.println("session属性的值:" + event.getValue());
}
//监听session域对象的修改
public void attributeReplaced(HttpSessionBindingEvent event) {
System.out.println("session域对象修改了");
System.out.println("session属性的名称:" + event.getName());
System.out.println("session属性的值:" + event.getValue());
}

}

对request的监听

对request的监听常用的监听接口有两个:

监听request的创建和request的销毁

监听接口为ServletRequestListener,方法有:

  • 监听request的创建 : requestCreate()
  • 监听request的销毁 : requestDestoryed()

监听request域对象信息的设置、修改和删除

监听接口为ServletRequestAttributeListener,方法有:

  • 监听ServletRequest域对象的设置:attributeAdded()
  • 监听ServletRequest域对象的修改:attributeReplaced()
  • 监听ServletRequest域对象的删除:attributeRemoved()

小结

  • 使用监听可以对application、session和request的范围属性进行监听
  • 使用ServletContextListener可以监听服务器的启动和关闭
  • 使用HttpSessionListener可以监听session的创建和session的注销
  • 使用ServletRequestListener可以监听请求的创建和销毁
  • 监听器的配置主要是使用注解的方式完成
-------------本文结束,感谢您的阅读-------------
您的支持将鼓励我继续创作!!