欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

从零开始学习Java Web(七):认识8大Listener

程序员文章站 2022-05-01 13:02:17
...

    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

下一篇: Listener监听器