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

xiaoxiao2021-02-28  84

    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>

转载请注明原文地址: https://www.6miu.com/read-62523.html

最新回复(0)