HttpSessionListener监听器实战

一 定义监听器

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 online = (Map)
                application.getAttribute("online");
            if (online == null)
            {
                online = new Hashtable();
            }
            // 将用户在线信息放入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 online = (Map)
            application.getAttribute("online");
        if (online != null)
        {
            // 删除该用户的在线信息
            online.remove(sessionId);
        }
        application.setAttribute("online" , online);
    }
}

二 测试JSP

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@ page import="java.util.*" %>



     用户在线信息 
    


在线用户:

<%
Map online = (Map)application
    .getAttribute("online");
for (String sessionId : online.keySet())
{%>

<%}%>

三 测试结果

HttpSessionListener监听器实战_第1张图片

你可能感兴趣的:(JSP,JSP)

<%=sessionId%> <%=online.get(sessionId)%>