J2EE中监听器Listener的应用

来自http://blog.csdn.net/uciqxkj/archive/2008/11/06/3238853.aspx

 

本文以二个Listener实例来讲述ServletContext、HttpSession对象生命周期及ServletContext、HttpSession对象中属性变化情况。

实例一:

         用于监听ServletContext对象生命周期及ServletContext对象中属性的变化情况的监听器ContextListener,分别实现了ServletContextListener,ServletContextAttributeListener接口。代码如下:

  1. package  com.hc.znpb.servlet;
  2. import  javax.servlet.ServletContextAttributeEvent;
  3. import  javax.servlet.ServletContextAttributeListener;
  4. import  javax.servlet.ServletContextEvent;
  5. import  javax.servlet.ServletContextListener;
  6. /**
  7.  * ServletContext对象监听器.<br>
  8.  * 作用:监听ServletContext对象生命周期及ServletContext对象中属性变化情况
  9.  * 
  10.  * <pre>
  11.  * Copy Right Information : HC
  12.  * Project : znpb
  13.  * JDK version used : jdk 1.5.12
  14.  * Version : 1.0
  15.  * Modification history : Sep 27, 2008
  16.  * </pre>
  17.  */
  18. public   class  ContextListener  implements  ServletContextListener,
  19.         ServletContextAttributeListener {
  20.      /**
  21.      * 当应用关闭时将执行此方法
  22.      */
  23.      public   void  contextDestroyed(ServletContextEvent arg0) {
  24.              System.out.println( "【监听到】应用被关闭!" );
  25.     }
  26.      /**
  27.      * 当应用启动时将执行此方法
  28.      */
  29.      public   void  contextInitialized(ServletContextEvent arg0) {
  30.          System.out.println( "【监听到】应用被启动!" );
  31.     }
  32.      /**
  33.      * 当ServletContext对象中新增属性时将执行此方法
  34.      */
  35.      public   void  attributeAdded(ServletContextAttributeEvent arg0) {
  36.          System.out.println( "【监听到】ServletContext对象中新增一名为"  + arg0.getName()
  37.                 +  "的属性,其属性值为:"  + arg0.getValue());
  38.     }
  39.      /**
  40.      * 当ServletContext对象中删除属性时将执行此方法
  41.      */
  42.      public   void  attributeRemoved(ServletContextAttributeEvent arg0) {
  43.          System.out.println( "【监听到】ServletContext对象中一名为"  + arg0.getName()
  44.                 +  "的属性被删除!" );
  45.     }
  46.      /**
  47.      * 当ServletContext对象中更新属性时将执行此方法
  48.      */
  49.      public   void  attributeReplaced(ServletContextAttributeEvent arg0) {
  50.          System.out.println( "【监听到】ServletContext对象中一名为"  + arg0.getName()
  51.                 +  "的属性被更新!" );
  52.     }
  53. }

实例二:

    用于监听HttpSession对象生命周期及HttpSession对象中属性的变化情况的监听器SessionListener,分别实现了HttpSessionListener,HttpSessionAttributeListener接口。代码如下:

  1. package  com.hc.znpb.servlet;
  2. import  javax.servlet.http.HttpSessionAttributeListener;
  3. import  javax.servlet.http.HttpSessionBindingEvent;
  4. import  javax.servlet.http.HttpSessionEvent;
  5. import  javax.servlet.http.HttpSessionListener;
  6. import  com.hc.znpb.util.SysUtil;
  7. /**
  8.  * Session监听器.<br>
  9.  * 作用:用于监听HttpSession对象的生命周期及HttpSession对象中属性变化情况
  10.  * 
  11.  * <pre>
  12.  * Copy Right Information : HC
  13.  * Project : znpb
  14.  * JDK version used : jdk 1.5.12
  15.  * Version : 1.0
  16.  * Modification history : Sep 27, 2008
  17.  * </pre>
  18.  */
  19. public   class  SessionListener  implements  HttpSessionAttributeListener,
  20.         HttpSessionListener {
  21.      // 在线人数统计
  22.      private   int  userCount =  0 ;
  23.      /**
  24.      * 当HttpSession对象中新增属性时将执行此方法
  25.      */
  26.      public   void  attributeAdded(HttpSessionBindingEvent arg0) {
  27.          System.out.println( "【监听到】HttpSession对象中新增一名为"  + arg0.getName()
  28.                 +  "的属性,其属性值为"  + arg0.getValue());
  29.     }
  30.      /**
  31.      * 当HttpSession对象中删除属性时将执行些方法
  32.      */
  33.      public   void  attributeRemoved(HttpSessionBindingEvent arg0) {
  34.          System.out.println( "【监听到】HttpSession对象中一名为"  + arg0.getName()
  35.                 +  "的属性被删除!" );
  36.     }
  37.      /**
  38.      * 当HttpSession对象中更新属性时将执行些方法
  39.      */
  40.      public   void  attributeReplaced(HttpSessionBindingEvent arg0) {
  41.          System.out.println( "【监听到】HttpSession对象中一名为"  + arg0.getName()
  42.                 +  "的属性被修改!" );
  43.     }
  44.      /**
  45.      * 当新生一个新的HttpSession对象(新用户上线)时执行此方法
  46.      */
  47.      public   void  sessionCreated(HttpSessionEvent arg0) {
  48.         // 在线人数加1
  49.         arg0.getSession().setAttribute(SysUtil.SESSION_COUNT_USERS,
  50.                  new  Integer( this .userCount++));
  51.         System.out.println( "【监听到】新用户"  + arg0.getSession().getId() +  "上线!" );
  52.         System.out.println( "【在线用户数】"  +  this .userCount +  "人" );
  53.     }
  54.      /**
  55.      * 当新生一个HttpSession对象销毁(新用户下线)时执行此方法
  56.      */
  57.      public   void  sessionDestroyed(HttpSessionEvent arg0) {
  58.          / / 在线人数减1
  59.         arg0.getSession().setAttribute(SysUtil.SESSION_COUNT_USERS,
  60.                  new  Integer(-- this .userCount));
  61.         System.out.println( "【监听到】新用户"  + arg0.getSession().getId() +  "下线!" );
  62.         System.out.println( "【在线用户数】"  +  this .userCount +  "人" );
  63.     }
  64. }

最后修改web.xml文件,如下:

  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>
  2. < web-app   xmlns = "http://java.sun.com/xml/ns/j2ee"
  3.      xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"   version = "2.4"
  4.      xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
  5.      < listener >
  6.          < listener-class >
  7.             com.hc.znpb.servlet.ContextListener
  8.          </ listener-class >
  9.      </ listener >
  10.      < listener >
  11.          < listener-class >
  12.             com.hc.znpb.servlet.SessionListener
  13.          </ listener-class >
  14.      </ listener >
  15. </ web-app >

你可能感兴趣的:(jdk,Web,xml,servlet,sun)