监听器

监听器是serlvet的一种,用于web整个环境的监听。包括application,session,request监听。

其最常见的应用是在线人数统计。原理是在系统初始化时建立一个application范围的user链表,然后对session的各种动作进行监听,当增加一个session后,往user链表中添加对象,当用户注销时从链表中删除对象。

监听器代码如下:

package com.listner;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;


public class OnlineDemo implements ServletContextListener,
        HttpSessionAttributeListener, HttpSessionListener {
    private ServletContext application = null;
    public void contextDestroyed(ServletContextEvent sce) {
    }

    /**

      此方法是监听器初始化方法,声明一个user链表

    */
    public void contextInitialized(ServletContextEvent sce) {
        application = sce.getServletContext() ;
        application.setAttribute("userlist", new ArrayList()) ;
    }

 

     /**

      当一个新的session被赋值是触发该方法

    */


    public void attributeAdded(HttpSessionBindingEvent sbe) {
      List list = (List)application.getAttribute("userlist") ;
      list.add(sbe.getValue()) ;
      application.setAttribute("userlist", list) ;
     

    }

    public void attributeRemoved(HttpSessionBindingEvent sbe) {
       
    }

    public void attributeReplaced(HttpSessionBindingEvent sbe) {
       

    }

    public void sessionCreated(HttpSessionEvent se) {
        // TODO Auto-generated method stub

    }

      /**

      在清除session之前调用,将session中的值从list中删除

    */


    public void sessionDestroyed(HttpSessionEvent sbe) {
         List list = (List)application.getAttribute("userlist") ;
         String value = (String)sbe.getSession().getAttribute("username") ;
         list.remove(value) ;
         application.setAttribute("userlist", list) ;

    }

}

 

 

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