话不多说直接贴代码
public class SessionListener implements HttpSessionListener {
// 保存session和username的映射
private static HashMap hUserName = new HashMap();
private int MaxSession;
private int activeSession;
public void sessionCreated(HttpSessionEvent se) {
addSession();
}
public void sessionDestroyed(HttpSessionEvent se) {
delSession();
hUserName.remove(se.getSession().getId());
}
/**
* 判断用户是否已经登录及处理方法
* @author FuYuwei
* @time 2014-9-19 下午07:57:39
* @param session
* @param sUserName 登录名
* @return 用户是否已经登录的标志
*/
public static boolean isAlreadyEnter(HttpSession session,String sUserName){
boolean flag = false;
// 如果该用户已经登录过,则使用上次登录的用户掉线
if(hUserName.containsValue(sUserName)){
flag = true;
// 遍历原来的hUserName,删除原来用户名对应的sessionId,即删除原来的sessionId和username
Iterator iter = hUserName.entrySet().iterator();
while(iter.hasNext()){
Map.Entry entry = (Map.Entry)iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
if(((String)val).equals(sUserName)){
hUserName.remove(key);
}
}
// 添加当前用户的sessionId和username
hUserName.put(session.getId(), sUserName);
}
// 如果没有登录直接添加当前用户的sessionId和username
else{
flag = false;
hUserName.put(session.getId(),sUserName);
}
return flag;
}
/**
* 判断用户是否在线
* @author FuYuwei
* @time 2014-9-19 下午08:11:00
* @param session
* @return
*/
public static boolean isOnline(HttpSession session){
boolean flag = true;
if(hUserName.containsValue(session.getId())){
flag = true;
}
else{
flag = false;
}
return flag;
}
/**
* OnlineSessionListener监听器(实现HttpSessionListener)接口来实现页面在线访问人数统计,
* 当有用户访问到页面就会创建一个session,此时会触发public void sessionCreated(HttpSessionEvent se)方法,
* 如果session失效,此时会触发public void sessionDestroyed(HttpSessionEvent se)方法。
* 在此方法里我们用OnlineList进行在线访问人数的统计
* @author FuYuwei
* @time 2014-9-19 下午08:31:28
*/
public void addSession(){
activeSession++;
if(activeSession>=MaxSession){
MaxSession = activeSession;
}
}
public void delSession(){
if(activeSession>0){
activeSession--;
}
}
/**
* 获取在线人数
* @author FuYuwei
* @time 2014-9-20 下午03:36:58
* @return
*/
public int getActiveNum(){
return activeSession;
}
/**
* 获取累计访问人数
* @author FuYuwei
* @time 2014-9-20 下午03:37:30
* @return
*/
public int getMaxSessionNum(){
return MaxSession;
}
}
在Web.xml中配置监听如下:
<!-- 监听session -->
<listener>
<listener-class>com.think.SessionListener</listener-class>
</listener>