用法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package com.zss.Listener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;@WebListener public class Listener implements ServletContextListener { @Override public void contextInitialized (ServletContextEvent sce) { System.out.println("我监听到了上下文的初始化动作" ); } @Override public void contextDestroyed (ServletContextEvent sce) { System.out.println("我监听到了上下文的销毁动作" ); } }
实例 我们在dispatcher中,初始化的调用了ClassPathXmlApplicationContext,明确了依赖关系
1 2 3 4 5 @Override public void init () { super .init(); beanFactory=new ClassPathXmlApplicationContext (); }
但是我们的在初始化的时候进行依赖关系的确认,这样我们后端对前端的响应速度会降低,那么如果我们将依赖关系调用到listener中,在监听上下文的时候就进行依赖关系的确认,虽然启动速度会降低。
1 2 3 4 5 6 7 8 9 10 11 12 13 @WebListener public class ContextLoaderListener implements ServletContextListener { @Override public void contextInitialized (ServletContextEvent sce) { BeanFactory beanFactory=new ClassPathXmlApplicationContext (); ServletContext application=sce.getServletContext(); application.setAttribute("beanFactory" ,beanFactory); } @Override public void contextDestroyed (ServletContextEvent sce) { } }
1 2 3 4 5 6 7 8 9 10 11 @Override public void init () { super .init(); ServletContext application=getServletContext(); Object object=application.getAttribute("beanFactory" ); if (object!=null ){ beanFactory=(BeanFactory) object; }else { throw new RuntimeException ("ioc容器获取失败,依赖关系加载错误" ); } }
解析 copy来源于代码重工 (gitee.io)
①ServletContextListener 作用:监听ServletContext对象的创建与销毁
方法名
作用
contextInitialized(ServletContextEvent sce)
ServletContext创建时调用
contextDestroyed(ServletContextEvent sce)
ServletContext销毁时调用
ServletContextEvent对象代表从ServletContext对象身上捕获到的事件,通过这个事件对象我们可以获取到ServletContext对象。
# ②HttpSessionListener作用:监听HttpSession对象的创建与销毁
方法名
作用
sessionCreated(HttpSessionEvent hse)
HttpSession对象创建时调用
sessionDestroyed(HttpSessionEvent hse)
HttpSession对象销毁时调用
HttpSessionEvent对象代表从HttpSession对象身上捕获到的事件,通过这个事件对象我们可以获取到触发事件的HttpSession对象。
# ③ServletRequestListener作用:监听ServletRequest对象的创建与销毁
方法名
作用
requestInitialized(ServletRequestEvent sre)
ServletRequest对象创建时调用
requestDestroyed(ServletRequestEvent sre)
ServletRequest对象销毁时调用
ServletRequestEvent对象代表从HttpServletRequest对象身上捕获到的事件,通过这个事件对象我们可以获取到触发事件的HttpServletRequest对象。另外还有一个方法可以获取到当前Web应用的ServletContext对象。
# ④ServletContextAttributeListener作用:监听ServletContext中属性的创建、修改和销毁
方法名
作用
attributeAdded(ServletContextAttributeEvent scab)
向ServletContext中添加属性时调用
attributeRemoved(ServletContextAttributeEvent scab)
从ServletContext中移除属性时调用
attributeReplaced(ServletContextAttributeEvent scab)
当ServletContext中的属性被修改时调用
ServletContextAttributeEvent对象代表属性变化事件,它包含的方法如下:
方法名
作用
getName()
获取修改或添加的属性名
getValue()
获取被修改或添加的属性值
getServletContext()
获取ServletContext对象
# ⑤HttpSessionAttributeListener作用:监听HttpSession中属性的创建、修改和销毁
方法名
作用
attributeAdded(HttpSessionBindingEvent se)
向HttpSession中添加属性时调用
attributeRemoved(HttpSessionBindingEvent se)
从HttpSession中移除属性时调用
attributeReplaced(HttpSessionBindingEvent se)
当HttpSession中的属性被修改时调用
HttpSessionBindingEvent对象代表属性变化事件,它包含的方法如下:
方法名
作用
getName()
获取修改或添加的属性名
getValue()
获取被修改或添加的属性值
getSession()
获取触发事件的HttpSession对象
# ⑥ServletRequestAttributeListener作用:监听ServletRequest中属性的创建、修改和销毁
方法名
作用
attributeAdded(ServletRequestAttributeEvent srae)
向ServletRequest中添加属性时调用
attributeRemoved(ServletRequestAttributeEvent srae)
从ServletRequest中移除属性时调用
attributeReplaced(ServletRequestAttributeEvent srae)
当ServletRequest中的属性被修改时调用
ServletRequestAttributeEvent对象代表属性变化事件,它包含的方法如下:
方法名
作用
getName()
获取修改或添加的属性名
getValue()
获取被修改或添加的属性值
getServletRequest ()
获取触发事件的ServletRequest对象
# ⑦HttpSessionBindingListener作用:监听某个对象在Session域中的创建与移除
方法名
作用
valueBound(HttpSessionBindingEvent event)
该类的实例被放到Session域中时调用
valueUnbound(HttpSessionBindingEvent event)
该类的实例从Session中移除时调用
HttpSessionBindingEvent对象代表属性变化事件,它包含的方法如下:
方法名
作用
getName()
获取当前事件涉及的属性名
getValue()
获取当前事件涉及的属性值
getSession()
获取触发事件的HttpSession对象
# ⑧HttpSessionActivationListener作用:监听某个对象在Session中的序列化与反序列化。
方法名
作用
sessionWillPassivate(HttpSessionEvent se)
该类实例和Session一起钝化到硬盘时调用
sessionDidActivate(HttpSessionEvent se)
该类实例和Session一起活化到内存时调用
HttpSessionEvent对象代表事件对象,通过getSession()方法获取事件涉及的HttpSession对象。