监听器(Listener)学习(一)

一 .监听器(Listener)

     监听器(Listener)可以监听客户端的请求、服务器端的操作。通过监听器可以自动触发一些事件,比如监听在线的用户数量。监听器对象可以在事件发生前、发生后做一些必要的处理。

 Listener接口和Event类

在web.xml中配置监听器的格式如下:

<listener>

    <listener-class>监听类</listener-class>

</listener>

在3.0以后 一般直接用注解即可 

@WebListener

 1.监听ServletContextListener的实例代码

/**
 * ServletContextListener接口用于监听Servlet上下文的变化
 * 其两个方法被称为“Web应用程序的生命周期方法”。在这两个方法中,
 * 都需要一个ServletContextEvent类型的参数,该类只有以下一个方法。
 * ■ ServletContext getServletContext():获得ServletContext对象。
 */
@WebListener
public class MyContextListener implements ServletContextListener{
    public MyContextListener() {
    }

    /**
     * 上下文初始化
     * 当ServletContext对象创建的时候,将会调用此方法进行处理。
     *
     * @param sce
     */
    public void contextInitialized(ServletContextEvent sce) {
        logout("contextInitialized()-->ServletContext初始化了");
    }

    /**
     * 上下文销毁
     * 当ServletContext对象销毁的时候(例如关闭Web容器或者重新加载应用),将会调用此方法进行处理。
     *
     * @param arg0
     */
    public void contextDestroyed(ServletContextEvent arg0) {
        logout("contextDestroyed()-->ServletContext被销毁");
    }

}

2.ServletAttributeListener接口

/**
 *ServletAttributeListener接口用于监听ServletContext中属性的变化,
 * 该接口提供3个方法,分别用于处理ServletContext中属性的增加、删除和修改。
 */
@WebListener
public class MyContextListener implements ServletContextAttributeListener {
    public MyContextListener() {
    }

    /**
     * 添加属性
     * 当ServletContext中增加一个属性时,将会调用此方法进行处理。
     * @param scae
     */
    public void attributeAdded(ServletContextAttributeEvent scae) {
        logout("增加了一个ServletContext属性:attributeAdded('" +
                scae.getName()+ "', '" + scae.getValue() + "')");
    }
    /**
     *  修改属性
     * 当ServletContext中修改一个属性值时,将会调用此方法进行处理。
     * @param scae
     */
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        logout("某个ServletContext的属性被改变:attributeReplaced ('"
                +scae.getName()+ "', '" + scae.getValue() + "')");
    }

    /**
     * 移除属性
     *当ServletContext中删除一个属性时,将会调用此方法进行处理。
     * @param scae
     */
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        logout("删除了一个ServletContext属性:attributeRemoved ('"
                +scae.getName()+ "', '" + scae.getValue() + "')");
    }

    // 写日志信息
    private void logout(String message) {
        PrintWriter out = null;
        try {
            out = new PrintWriter(new FileOutputStream("C:\\log.txt",
                    true));
            SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            String curtime = datef.format(new Date());
            out.println(curtime + "::Form ContextListener: " + message);
            out.close();
        } catch (Exception e) {
            out.close();
            e.printStackTrace();
        }
    }
}

 

在应用中,如果监听类同时实现ServletContextListener和ServletContextAttributeListener两个接口,其工作流程如下:

01 Web应用启动的时候,contextInitialized(ServletContextEvent event)方法进行初始化。

02 如果在Application范围内添加一个属性,将会触发ServletContextAttributeEvent事件,通过AttributeAdded(ServletContextAttributeEvent event)方法进行处理。

03 如果在Application的范围内修改属性值,将会触发ServletContextAttributeEvent事件,通过AttributeReplaced(ServletContextAttributeEvent event)方法进行处理。

04 如果在Application的范围内删除一个属性,将会触发ServletContextAttributeEvent事件,通过AttributeRemoved(ServletContextAttributeEvent event)方法进行处理。

05 Web应用关闭时,contextDestroyed(ServletContextEvent event)方法进行卸载。

上下文监听器的工作流程如图所示。

注意在实际应用中,自定义的类可以实现ServletContextListener和ServletContextAttributeListener其中之一,从而完成特定的应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值