JavaWeb之监听器

1 监听器

所谓监听器实际就是一个Java程序,功能是监听另一个Java对象的变化(如对象创建、方法调用、属性变化等)。在JavaWeb中,一共有8个监听器,分别用来监听ServletContext、HttpSession、ServletRequest和JavaBean,下面我们依次来介绍这些监听器。

2 ServletContext的监听器

ServletContext作用域有两个监听器,一个是ServletContextListener,用来监听ServletContext对象的创建和销毁,另一个是ServletContextAttributeListener,用来监听ServletContext中属性的增加、删除和替换。

2.1 ServletContextListener的使用

1、实现ServletContextListener接口

/**
 * 用来监听ServletContext对象创建和销毁的监听器
 */
public class MyServletContextListener implements ServletContextListener {
    public void contextDestroyed(ServletContextEvent sce) {
        // 服务器启动,web应用加载后立即创建代表当前web应用的ServletContext对象
        System.out.println("ServletContext对象被销毁了...." + sce.getServletContext());
    }

    public void contextInitialized(ServletContextEvent sce) {
        // 服务器关闭或web应用被移除出容器时,ServletContext随着web应用的销毁而销毁
        System.out.println("ServletContext对象被创建出来了...." + sce.getServletContext());
    }
}

2、在web.xml中注册这个监听器

<listener>
    <listener-class>com.duiyi.listener.MyServletContextListener</listener-class>
</listener>

2.2 ServletContextAttributeListener的使用

1、实现ServletContextAttributeListener接口

public class MyServletContextAttrListener implements ServletContextAttributeListener {
    public void attributeAdded(ServletContextAttributeEvent scab) {
        System.out.println("属性被加入到了ServletContext域中" + scab.getName() + ":" + scab.getValue());
    }

    public void attributeRemoved(ServletContextAttributeEvent scab) {
        System.out.println("属性被移除出了ServletContext域中" + scab.getName() + ":" + scab.getValue());
    }

    public void attributeReplaced(ServletContextAttributeEvent scab) {
        // scab获取到的是修改前的原值,要获取最新值只能通过ServletContext域获取
        System.out.println("属性被替换在ServletContext域中" + scab.getName() + ":" + scab.getValue() + ":" + scab.getServletContext().getAttribute(scab.getName()));
    }
}

2、在web.xml中注册这个监听器

<listener>
    <listener-class>com.duiyi.listener.MyServletContextAttrListener </listener-class>
</listener>

3 HttpSession和ServletRequest监听器

与ServletContext一样,HttpSession和ServletRequest也分别有对象创建和销毁监听器以及属性监听器。HttpSession的两个监听器分别是HttpSessionListener和HttpSessionAttributeListener,而ServletRequest的两个监听器分别是ServletRequestListener和ServletRequestAttributeListener,使用方法和ServletContext的两个监听器一样,都需要在web.xml中注册。

4 JavaBean监听器

JavaBean监听器的作用是使JavaBean自己感知自己在Session中的状态变化,这个监听器不需要在web.xml中注册,只需要对应的JavaBean实现这个监听器即可。JavaBean监听器包括两个:HttpSessionBindingListener和HttpSessionActivationListener;下面就来介绍一下这两个监听器。

public class Person implements Serializable, HttpSessionBindingListener, HttpSessionActivationListener{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // HttpSessionBindingListener接口的方法
    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println("当前JavaBean对象被绑定到session域中时,JavaBean自己感知到自己被绑定到了session中,从而触发此方法...");
    }

    // HttpSessionBindingListener接口的方法
    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println("当前JavaBean对象被移除出session时,JavaBean自己感知到自己被移除出session从而触发此方法...");
    }

    // HttpSessionActivationListener接口的方法
    public void sessionDidActivate(HttpSessionEvent se) {
        System.out.println("JavaBean感知到自己随着session被活化了..触发此方法...");
    }

    // HttpSessionActivationListener接口的方法
    public void sessionWillPassivate(HttpSessionEvent se) {
        System.out.println("JavaBean感知到自己随着session被钝化了..触发此方法..");
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容