web应用事件(listener)

转载 2007年09月19日 11:08:00

作者:Faisal Khan  翻译:gagaghost

概述:


   在Servlet2.3规范中,Web应用事件是新增加的部分。它让你能最大程度地控制你的Web应用。在本文中,我们将学习两个很重要的应用事件:

  • 应用的启动和停止
  • Session的创建和失效
    如它们的名字那样,应用启动事件发生在你的应用第一次被servlet容器装载和启动的时候;停止事件发生在Web应用停止的时候。 
        Session创建事件发生在每次一个新的session创建的时候,类似地Session失效事件发生在每次一个Session失效的时候。为了使用这些Web应用事件为你做些有用的事情,我们必须创建和使用一些特殊的“监听”类。下面,我们将研究这些监听类到地是什么以及我们如何去使用它们。

    监听类:

    它们是实现了下边两个接口中任何一个接口的简单的java类:

  • javax.servlet.ServletContextListener 
  • javax.servlet.http.HttpSessionListener  
        如果你想让你的类监听应用的启动和停止事件,你就得实现ServletContextListener接口;如果你想让你的类去监听Session的创建和失效事件,那你就得实现HttpSessionListener接口。 让我们看看在这些接口中你必须要实现的方法。
    1.ServletContextListener :
    接口包括如下两个方法:
  • public void contextInitialized(ServletContextEvent sce); 
  • public void contextDestroyed(ServletContextEvent sce); 
     
       如果你实现了一个接口,那你就必须实现它所有的方法。因此,如果你想利用应用的启动和停止事件,你就需要创建一个Java类并实现ServletContextListener接口。下边是这样的一个类的例子:
     
    /*File : ApplicationWatch.java*/
    import javax.servlet.ServletContextListener;
    import javax.servlet.ServletContextEvent;
    public class ApplicationWatch implements ServletContextListener {
    public static long applicationInitialized = 0L;
    /* 应用启动事件 */
    public void contextInitialized(ServletContextEvent ce) {
    applicationInitialized = System.currentTimeMillis();
    }
    /*应用停止事件 */
    public void contextDestroyed(ServletContextEvent ce) {}
    }

       在上边的代码中,ApplicationWatch类实现了ServletContextListener接口。它实现了接口中的两个方法,但只用了其中的一个方法,另一个方法中没有写任何代码。这个类把应用启动的时间记录在一个可以从其它应用类中存取应用启动时间的public static变量中。 

       我将很快解释如何告诉服务器我们有这个监听类,但首先让我们看看HttpSessionListener接口有什么不同的方法。
    2.HttpSessionListener :
    这个接口也只包含两个方法,分别对应于Session的创建和失效:
  • public void sessionCreated(HttpSessionEvent se); 
  • public void sessionDestroyed(HttpSessionEvent se);

       如上边的ApplicationWatch例子那样,我们也创建了一个实现HttpSessionListener接口的类。如下:
    /*File : SessionCounter.java*/
    import javax.servlet.http.HttpSessionListener;
    import javax.servlet.http.HttpSessionEvent;
    public class SessionCounter implements HttpSessionListener {
    private static int activeSessions =0;
    /* Session创建事件 */
    public void sessionCreated(HttpSessionEvent se) {
           activeSessions++;
    }
    /* Session失效事件 */
    public void sessionDestroyed(HttpSessionEvent se) {
    if(activeSessions>0)activeSessions--;
    }

    public static int getActiveSessions() {
    return activeSessions;
    }
    }

       在上边的代码中,SessionCounter类实现了HttpSessionListener接口,其目的是计算活动会话的数量。
       好了,我们已经学习了什么是Web应用事件,有什么接口可以用以及看到了一些实现这些接口的例子。让我们看看如何告诉应用服务器我们有这些监听类。

    Web.xml :

       我们通过把类路径加入/WEB-INF/web.xml文件的标签<listener>中来告诉服务器我们的监听类。下边是一个web.xml文件的例子:
    <!-- Web.xml -->
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-appPUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">
    <web-app>
    <!-- Listeners -->
    <listener>
    <listener-class>
    com.stardeveloper.web.listener.SessionCounter
    </listener-class>
    </listener>
    <listener>
    <listener-class>
    com.stardeveloper.web.listener.ApplicationWatch</listener-class>
    </listener>
    </web-app>
     
  • web.xml中listener作用及使用

    一.WebContextLoaderListener 监听类 它能捕捉到服务器的启动和停止,在启动和停止触发里面的方法做相应的操作! 它必须在web.xml 中配置才能使用,是配置监听类的 ...
    • yy954744913
    • yy954744913
    • 2017年02月24日 17:49
    • 294

    Web项目中 Listener监听器的使用

    巧用Listener,可以实现一些特定的需求,下面我们介绍下
    • u012906938
    • u012906938
    • 2014年09月27日 20:45
    • 5077

    Android事件分发、View事件Listener全解析

    • zhongkejingwang
    • zhongkejingwang
    • 2014年07月26日 11:12
    • 4343

    Web+spring容器的生命周期与 各种 Listener

    Web+spring容器的生命周期与 各种 Listenerweb容器中的 Listener 配置Listener 种类与配置监听器Listener就是在application,session,req...
    • zjs40
    • zjs40
    • 2017年03月12日 00:04
    • 1488

    Android基础知识---监听事件及OnXxxListener事件

    一  监听器的模型主要由三类:          1)事件源(event source):产生事件的来源,各种组件如:按钮、窗口等;          2)事件(event):事件封装了界面组件上...
    • xiexie4827
    • xiexie4827
    • 2016年07月19日 13:55
    • 494

    web中的listener 用作 应用 详解

    在使用web.xml配置文件的时候,会问listener起什么作用的?  Listener是一种监听的方式,我们可以把自定义的监听程序配置在web.xml文件中。Listener支持Servlet2...
    • Shb_derek
    • Shb_derek
    • 2013年01月31日 11:06
    • 685

    javaweb学习总结(四十七)——监听器(Listener)在开发中的应用

    转载来自:http://www.cnblogs.com/xdp-gacl/p/3965508.html  监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中...
    • shehun11
    • shehun11
    • 2015年02月10日 14:02
    • 389

    让页面滑动流畅得飞起的新特性:Passive Event Listeners

    【前言】 在不久前的Google I/O 2016 Mobile Web Talk中,Google公布了一个让页面滑动更流畅的新特性Passive Event Listeners。该特性...
    • dj0379
    • dj0379
    • 2016年10月21日 14:57
    • 2390

    Web容器之Listener初始化顺序

    tomcat listener
    • long316
    • long316
    • 2016年07月12日 15:54
    • 3450

    JavaWeb三大组件之Listener

    三大组件:Servlet、 Listener、Filter Java中用到监听器的地方:AWT、SAX,监听器中肯定有事件源、事件、监听器。监听器注册到事件源,当事件源发生某件特定的事儿的时候,就触发...
    • xxssyyyyssxx
    • xxssyyyyssxx
    • 2015年11月24日 08:13
    • 2107
    内容举报
    返回顶部
    收藏助手
    不良信息举报
    您举报文章:web应用事件(listener)
    举报原因:
    原因补充:

    (最多只允许输入30个字)