package com.mobile.util;
import javax.servlet.http.*;
import java.util.*;
public class SessionListener implements HttpSessionListener{
private static HashMap bUserInfo = new HashMap();//保存sessionID和username的映射
/**以下是实现HttpSessionListener中的方法**/
public void sessionCreated(HttpSessionEvent se){
}
public void sessionDestroyed(HttpSessionEvent se){
bUserInfo.remove( se.getSession().getId() );
}
/*
* isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法
* @param sUserName String-登录的用户名称
* @return boolean-该用户是否已经登录过的标志
*/
public static boolean isAlreadyEnter(HttpSession session,String bUserName){
boolean flag = false;
if(bUserInfo.containsKey(bUserName)){//如果该用户已经登录过,则使上次登录的用户掉线(依据使用户名是否在bUserName中)
flag = true;
//遍历原来的hUserName,删除原用户名对应的sessionID(即删除原来的sessionID和bUserInfo)
Iterator iter = bUserInfo.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
if( ( (String)val ).equals(bUserName) ){
bUserInfo.remove(key);
}
System.out.println( "---bUserInfo = " + bUserInfo);
}
bUserInfo.put( bUserName,mid );//添加现在的sessionID和bUserInfo
System.out.println( "bUserInfo = " + bUserInfo);
}
else{//如果该用户没登录过,直接添加现在的sessionID和username
flag = false;
bUserInfo.put(bUserName,mid);
System.out.println( "bUserInfo = " + bUserInfo);
}
return flag;
}
/*
* isOnline-用于判断用户是否在线
* @param session HttpSession-登录的用户名称
* @return boolean-该用户是否在线的标志
*/
public static boolean isOnline(HttpSession session){
boolean flag = true;
if( bUserInfo.containsKey( session.getId() ) ){
flag = true;
}
else{
flag = false;
}
return flag;
}
}
web.xml
<listener>
<listener-class>com.mobile.util.SessionListener</listener-class>
</listener>