无线&移动互联网技术研发

换位思考·····
posts - 19, comments - 53, trackbacks - 0, articles - 283
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Listener 监听器的整理

Posted on 2009-09-01 22:47 Gavin.lee 阅读(434) 评论(0)  编辑  收藏 所属分类: web 积累(前端 + 后台)
package com.Gavin.tools.sessioncount;

import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

/**
 * 不需要在web.xml中部署
 * 向session绑定一个属性时调用。
 * 每一个会话过程均启动一个监听器
 * HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。 
 * session.setAttribute("listener",sessionListener);  将监听器植入HttpSession,这将激发监听器调用valueBound方法
 * 
 *         session.removeAttribute("listener")
 *         Session Time Out
 *         session.invalidate()
 *         session.setAttribute("onlineUserListener", "其他对象"); 即可自动调用监听器的valueUnbound方法。
 
*/


public class HttpSessionBindingEventTest implements HttpSessionBindingListener {

    
public String username;
    
    
public HttpSessionBindingEventTest(String username) {
        
this.username = username;
    }

    
    List onlineUserList 
= null;
    
    
public void valueBound(HttpSessionBindingEvent event) {
        HttpSession session 
= event.getSession();
        ServletContext application 
= session.getServletContext();
        
// 把用户名放入在线列表
        List onlineUserList = (List) application.getAttribute("onlineUserList");
        
// 第一次使用前,需要初始化
        if (onlineUserList == null{
            onlineUserList 
= new ArrayList();
            application.setAttribute(
"onlineUserList", onlineUserList);
        }

        onlineUserList.add(
this.username);
        
        
//username已经通过构造方法传递给 listener,在数据绑定时,可以直接把它放入用户列表。
    }


    
public void valueUnbound(HttpSessionBindingEvent event) {
        HttpSession session 
= event.getSession();
        ServletContext application 
= session.getServletContext();// 从在线列表中删除用户名  
        List onlineUserList = (List) application.getAttribute("onlineUserList");
        onlineUserList.remove(
this.username);
    }

    
    
public List getOnlineCount() {
        
return onlineUserList;
    }

}


//把用户名放入在线列表
//session.setAttribute("onlineUserList", new HttpSessionBindingEventTest(username));



HttpSessionListener:一旦,进入一个网站,这个网站就自动为浏览器分配一个session,调用sessionCreated(),当session过期或销毁时候,调用sessionDestroyed,这时候有两种方法:session.invalidate();和等待session自动过期。

<session-config>      
     
<session-timeout>1</session-timeout>   
</session-config> 

#session过期时间,时间单位是一分钟,并且只能是整数,如果是零或负数,那么会话就永远不会超时。    
 public void sessionCreated(HttpSessionEvent arg0) {}
 public void sessionDestroyed(HttpSessionEvent arg0) {} 
例:http://www.blogjava.net/jzone/articles/284193.html

HttpSessionAttributeListener:在向session增加、删除和修改属性时调用
 public void attributeAdded(HttpSessionBindingEvent arg0) {}
 public void attributeRemoved(HttpSessionBindingEvent arg0) {}
 public void attributeReplaced(HttpSessionBindingEvent arg0) {}


HttpSessionActivationListener:分布式环境下Session激活和失活时调用
 public void sessionDidActivate(HttpSessionEvent arg0) {}
 public void sessionWillPassivate(HttpSessionEvent arg0) {}


ServletContextListener:在一个application启动和结束时调用 
 public void contextDestroyed(ServletContextEvent arg0) {}
 public void contextInitialized(ServletContextEvent arg0) {}
例:http://www.cnblogs.com/jackyrong/archive/2006/09/04/494759.html
http://www.qqgb.com/Program/Java/JavaBlog/Program_145756.html


ServletContextAttributeListener:在向application增加、删除和修改 Attributes时调用
 public void attributeAdded(ServletContextAttributeEvent arg0) {}
 public void attributeRemoved(ServletContextAttributeEvent arg0) {}
 public void attributeReplaced(ServletContextAttributeEvent arg0) {}


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问