session监听器(可用于统计在线人数,了解系统当前的使用客户 ...

servlet中对session的监听有很多接口,功能很灵活,最常用的是监听Session和Attribute。这里要澄清一下概念,servlet中的session监听和Attribute监听含义有差别,session监听指的不是我们一般所理解的放置一个session或者销毁一个session,这是Attribute监听的功能,因为servlet中放置session的语法是session.setAttribute(“session名”,要放入的对象)。而session监听,监听的是HTTP连接,只要有用户与server连接,就算连接的是一个空白的jsp页面,也会触发session事件,所以此处的session实际上指的是connection,用来统计当前在线用户数最合适了。不知道我说清楚了没有。下面分别讲解这两种监听方式。 

1、 session监听 

首先编写一个session监听类,实作HttpSessionListener接口,它的作用是计算当前有多少个在线用户: 
/* 
*@Author bromon 
*2004-6-12 
*/ 
package org.bromon.test; 

import javax.servlet.*; 
import javax.servlet.http.*; 

public class SessionCount implements HttpSessionListener{ 
  private static int count=0; 

  public void sessionCreated(HttpSessionEvent se){ 
    count++; 
    System.out.println(“session创建:”+new java.util.Date()); 
  } 

  public void sessionDestroyed(HttpSessionEvent se){ 
    count--; 
    System.out.println(“session销毁:”+new java.util.Date()); 
  } 

  public static int getCount(){ 
    return(count); 
  } 


   怎么样,是不是一目了然?count被定义为static,是因为要保证整个系统只有这一个count。如果你实在不放心,可以把它写成一个单例类。 

然后在web.xml中声明这个监听器: 
<listener> 
 <listener-class> 
   org.bromon.test.SessionCount 
 </listener-class> 
</listener> 

编写一个测试页面test.jsp,内容是获得count: 
<% 
 int count=org.bromon.test.SessionCount.getCount(); 
 out.println(count); 
%> 
    需要注意的是,这里根本不涉及任何session的操作。重启动App server,试着连接test.jsp,可以看到监听器已经开始工作。 

2、 Attribute监听 
    例如一个站内消息系统,肯定要获得所有登陆者的ID,才有可能互发消息。这就涉及Attribute监听。假设我们写了个用户登陆的模块,用户通过身份验证之后会产生一个session,保存它的相关信息,比如: 
//check.jsp 
<% 
String name=request.getParameter(“name”); 
Name=new String(name.getBytes(“ISO8859-1”)); 
session.setAttribute(“user”,name); 
%> 

    做过jsp的兄弟应该对这段代码再熟悉不过了,下面写个监听器来监听用户登陆,把所有用户的ID保存到一个List当中,这个监听器实作HttpSessionAttributeListener接口: 

/* 
*@Author bromon 
*2004-6-12 
*/ 
package org.bromon.test; 

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.util.*; 

public class OnlineList implements HttpSessionAttributeListener{ 
   private static List list=new ArrayList(); 

   public void attributeAdded(HttpSessionBindingEvent se){ 
     if("user".equals(se.getName())){ 
       list.add(se.getValue()); 
     } 
  } 

   public void attributeRemoved(HttpSessionBindingEvent se){ 
     if("user".equals(se.getName())){ 
       list.remove(se.getValue()); 
     } 
   } 

  public void attributeReplaced(HttpSessionBindingEvent se){} 

  public static List getList(){ 
     return(list); 
  } 


写个简单的jsp来得到用户列表: 
<% 
 java.util.List list=org.bromon.test.OnlineList.getList(); 
 out.println("共有"+list.size()+"名用户已登陆:"); 
 for(int I=0;I<lise.size();i++){ 
    out.println(list.get(i)); 
 } 

%>


声明:此文章用于保存

你可能感兴趣的:(session监听器(可用于统计在线人数,了解系统当前的使用客户 ...)