从零开始学习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>









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章