Servlet_Listener监听器

监听器在监听时涉及到的几个部分:事件,事件源,监听器,处理器。
将监听器绑定到事件源上,当事件发生时触发监听器中的成员方法(即处理器),处理器根据获取到的事件对象对事件进行处理。
Servlet中共有8种监听器(可分为3类):

  1. 用于监听域对象创建和销毁的事件监听器(ServletContextListener接口,HttpSessionListener接口,ServletRequestListener接口)
  2. 用于监听域对象属性增加和删除的事件监听器(ServletContextAttributeListener接口,HttpSessionAttributeListener接口,ServletRequestAttributeListener接口)(Attribute:属性)
  3. 用于监听绑定到HttpSession域中某个对象状态的事件监听器
    a)HttpSessionBindingListener接口:用于监听JavaBean对象绑定到HttpSession对象和从HttpSession对象解绑的事件。
    b)HttpSessionActivationListener接口:用于监听HttpSession中对象活化和钝化的过程。

监听域对象的生命周期

  1. 编写一个实现了ServletContextListener接口,HttpSessionListener接口,ServletRequestListener接口的监听器实例。
public class TestListener implements ServletContextListener, ServletRequestListener,HttpSessionListener {
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext 对象创建");
    }
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext 对象销毁");
    }
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        System.out.println("ServletRequest 对象销毁");
    }
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        System.out.println("ServletRequest 对象创建");
    }
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("HttpSession 对象创建");
    }
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("HttpSession 对象销毁");
    }
}

  1. 在web.xml中配置监听器类信息
    <listener>
        <listener-class>Listener.TestListener</listener-class>
    </listener>

注意:在Servlet2.4之前,<listener>元素必须放在所有<servlet>元素之前,且在所有<filter-mapping>元素之后。


  1. 开启web服务器,并打开一个页面文件(.html不行,不支持session)
    在开启/关闭web服务器的时候,能看到ServletContext对象创建/销毁的提示
    浏览器发出请求后,web容器会创建ServletRequest对象和HttpSession对象,请求完成后ServletRequest对象随之销毁,HttpSession对象会在关闭浏览器或Session过期后销毁。
posted @ 2022-08-05 21:36  独游空想家  阅读(74)  评论(0编辑  收藏  举报