现在的位置: 首页 > 综合 > 正文

使用HttpSessionListener接口实现用户在线状态监控

2013年09月10日 ⁄ 综合 ⁄ 共 1601字 ⁄ 字号 评论关闭

package lee;

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

@WebListener
public class OnlineListener
    implements HttpSessionListener
{
    //当用户与服务器之间开始session时触发该方法
    public void sessionCreated(HttpSessionEvent se)
    {
        HttpSession session = se.getSession();
        ServletContext application = session.getServletContext();
        //获取session ID
        String sessionId = session.getId();
        //如果是一次新的会话
        if (session.isNew())
        {
            String user = (String)session.getAttribute("user");
            //未登录用户当游客处理
            user = (user == null) ? "游客" : user;
            Map<String , String> online = (Map<String , String>)
                application.getAttribute("online");
            if (online == null)
            {
                online = new Hashtable<String , String>();
            }
            //将用户在线信息放入Map中
            online.put(sessionId , user);
            application.setAttribute("online" , online);
        }
    }
    //当用户与服务器之间session断开时触发该方法
    public void sessionDestroyed(HttpSessionEvent se)
    {
        HttpSession session = se.getSession();
        ServletContext application = session.getServletContext();
        String sessionId = session.getId();
        Map<String , String> online = (Map<String , String>)
            application.getAttribute("online");
        if (online != null)
        {
            //删除该用户的在线信息
            online.remove(sessionId);
        }
        application.setAttribute("online" , online);
    }

}

<body>
在线用户:
<table width="400" border="1">
<%
Map<String , String> online = (Map<String , String>)application
    .getAttribute("online");
for (String sessionId : online.keySet())
{%>
<tr>
    <td><%=sessionId%>
    <td><%=online.get(sessionId)%>
</tr>
<%}%>
</body>

抱歉!评论已关闭.