从零开始学习Java Web(七):认识8大Listener
3个属性监听者:
1、ServletContextListener
void contextInitialized(ServletContextEvent)
void contextDestroyed(ServletContextEvent)
2、ServletRequestAttributeListener
void attributeAdded(ServletRequestAttributeEvent)
void attributeRemoved(ServletRequestAttributeEvent)
void attributeReplaced(ServletRequestAttributeEvent)
3、HttpSessionAttributeListener
void attributeAdded(HttpSessionBindingEvent)
void attributeRemoved(HttpSessionBindingEvent)
void attributeReplaced(HttpSessionBindingEvent)
以上三个Listener分别在ServletContext、ServletRequest、HttpSession的属性(Attribute)发生变化时会触发相应的方法,调用setAttribute(name, value)会触发attributeAdded()或者attributeReplaced(),调用removeAttribute(name)会触发attributeRemoved()。
3个生命周期监听者:
4、ServletRequestListener
void requestInitialized(ServletRequestEvent)
void requestDestroyed(ServletRequestEvent)
5、ServletContextListener
void contextInitialized(ServletContextEvent)
void contextDestroyed(ServletContextEvent)
6、HttpSessionListener
void sessionCreated(HttpSessionEvent)
void sessionDestroyed(HttpSessionEvent)
以上三个Listener分别会在他们创建的时候调用contextInitialized,在消亡的时候调用sessionDestroyed。、
剩下的两个Listener
7、HttpSessionBindingListener
void valueBound(HttpSessionBindingEvent)
void valueUnbound(HttpSessionBindingEvent)
8、HttpSessionActivationListener
void sessionWillPassivate(HttpSessionEvent)
void sessionDidActivate(HttpSessionEvent)
这里讲一下HttpSessionBindingListener,它的两个方法的触发条件相对比HttpSessionAttributeListener要苛刻一些,我们使用session.setAttribute(name,value)或者session.removeAttribute(name)都能触发HttpSessionAttributeListener的方法。但是,只有setAttribute或者removeAttribute方法中的value对象实现了HttpSessionBindingListener,才会触发HttpSessionBindingListener中的方法。
例如,User实现了HttpSessionBindingListener
public class User implements HttpSessionBindingListener{
@Override
public void valueBound(HttpSessionBindingEvent event) {
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
}
}
那么,以下的操作就回触发HttpSessionBindingListener中的方法。
session.setAttribute("user", new User());//会触发valueBound的方法
session.removeAttribute("user");//会触发valueUnbound方法
HttpSessionActivationListener是为了让HttpSession从一个VM转移到另一个VM,如果你session的属性(Attribute)是Serializable对象,或者不担心属性迁移问题,这个Listener几乎不会用到,事实上,这个Listener大多数都不会使用。
sessionWillPassivate:在方法里将非Serializable字段设置为某种状态。
sessionDidActivate:将在sessionWillPassivate设置为某种状态的字段恢复成原来的样子。
当然,不是写一个类 implements Linstener就能使用监听事件,还需要在web.xml中进行配置。
<web-app ...>
<listener>
<listener-class>xxxxx</listener-class>
</listener>
</web-app>
上一篇: Listener
下一篇: Listener监听器