自定义listener
2020-09-25 本文已影响0人
dancer4code
两种方式,一种是基于注解,另一种通过注册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之间区别