美文网首页
自定义listener

自定义listener

作者: dancer4code | 来源:发表于2020-09-25 17:18 被阅读0次

两种方式,一种是基于注解,另一种通过注册bean注册


方式一:基于注解

@WebListener

package com.d4c.custombean.listener;

import lombok.extern.slf4j.Slf4j;

import javax.servlet.*;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.*;

@WebListener
@Slf4j
public class MyServletContextListener implements ServletContextListener, ServletContextAttributeListener, HttpSessionListener,
        HttpSessionAttributeListener, HttpSessionBindingListener,HttpSessionActivationListener,HttpSessionIdListener,
        ServletRequestListener,ServletRequestAttributeListener
{

    //ServletContextAttributeListener
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        log.info("ServletContextAttributeListener attributeAdded-----");
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        log.info("ServletContextAttributeListener attributeRemoved-----");
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        log.info("ServletContextAttributeListener attributeReplaced-----");
    }
    //ServletContextListener
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        log.info("ServletContextListener contextInitialized-----");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        log.info("ServletContextListener contextDestroyed-----");
    }

    //HttpSessionIdListener
    @Override
    public void sessionIdChanged(HttpSessionEvent se, String oldSessionId) {
        log.info("HttpSessionIdListener sessionIdChanged-----");
    }

    //HttpSessionActivationListener
    @Override
    public void sessionWillPassivate(HttpSessionEvent se) {
        log.info("HttpSessionActivationListener sessionWillPassivate-----");
    }

    @Override
    public void sessionDidActivate(HttpSessionEvent se) {
        log.info("HttpSessionActivationListener sessionDidActivate-----");
    }

    //HttpSessionAttributeListener
    @Override
    public void attributeAdded(HttpSessionBindingEvent se) {
        log.info("HttpSessionAttributeListener attributeAdded-----");
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent se) {
        log.info("HttpSessionAttributeListener attributeRemoved-----");
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent se) {
        log.info("HttpSessionAttributeListener attributeReplaced-----");
    }

    //HttpSessionBindingListener
    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        log.info("HttpSessionBindingListener valueBound-----");
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        log.info("HttpSessionBindingListener valueUnbound-----");
    }

    //HttpSessionListener
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        log.info("HttpSessionListener sessionCreated-----");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        log.info("HttpSessionBindingListener sessionDestroyed-----");
    }

    //ServletRequestAttributeListener
    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae) {
        log.info("ServletRequestAttributeListener attributeAdded-----");
    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae) {
        log.info("ServletRequestAttributeListener attributeRemoved-----");
    }

    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae) {
        log.info("ServletRequestAttributeListener attributeReplaced-----");
    }

    //ServletRequestListener
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        log.info("ServletRequestListener requestDestroyed-----");
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        log.info("ServletRequestListener requestInitialized-----");

    }
}

Servlet事件监听器
 在Servlet技术中已经定义了一些事件,
 并且我们可以针对这些事件来编写相关的事件监听器,从而对事件作出相应处理。
 Servlet事件主要有3类:Servlet上下文事件、会话事件与请求事件
 下面具体讲解这3类事件的监听器实现。
 
 1.对Servlet上下文进行监听
 可以监听ServletContext对象的创建和删除以及属性的添加、删除和修改等操作。该监听器需要使用到如下两个接口类:
     ● ServletContextAttributeListener:监听对ServletContext属性的操作,如增加、删除、修改操作。
     ● ServletContextListener:监听ServletContext,
         当创建ServletContext时,激发contextInitialized (ServletContextEvent sce)方法。
         当销毁ServletContext时,激发contextDestroyed(ServletContext- Event sce)方法。
 
 2.监听Http会话
 可以监听Http会话活动情况、Http会话中属性设置情况,也可以监听Http会话的active、paasivate情况等。该监听器需要使用到如下多个接口类:
   ● HttpSessionListener:监听HttpSession的操作。
         当创建一个Session时,激发session Created (SessionEvent se)方法;
         当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。
   ● HttpSessionActivationListener:用于监听Http会话active、passivate情况。
   ● HttpSessionAttributeListener:监听HttpSession中属性的操作。
         当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;
         当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;
         当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。
   ● HttpSessionBindingListener:监听HttpSession绑定和解绑
   ● HttpSessionIdListener:

       
 3.对客户端请求进行监听
 对客户端的请求进行监听是在Servlet 2.4规范中新添加的一项技术,使用的接口类如下:
     ● ServletRequestListener接口类。
     ● ServletRequestAttrubuteListener接口类
   

方式二:基于ServletListenerRegistrationBean

package com.d4c.custombean.config;

import com.d4c.custombean.filter.SecondFilter;
import com.d4c.custombean.listener.MyServletListener;
import com.d4c.custombean.servlet.ThirdServlet;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyRegisterBean {

    @Bean
    public ServletListenerRegistrationBean servletListenerRegistrationBean(){
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();
        //注册自定义Listener
        bean.setListener(new MyServletListener());
        bean.setEnabled(true);
        //路径
        bean.setOrder(3);
        return bean;
    }

}


引用文章

java web Listener的简单使用案例
Spring Boot---(3)整合Web三大组件(Servlet,Filter过滤器,Listener监听器
servlet注解 @WebListener
HttpSessionListener与HttpSessionBindingListener之间区别

相关文章

网友评论

      本文标题:自定义listener

      本文链接:https://www.haomeiwen.com/subject/xipfuktx.html