千家信息网

如何使用HttpSessionListener监听器

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇"如何使用HttpSessionListener监听器"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面
千家信息网最后更新 2025年02月01日如何使用HttpSessionListener监听器

这篇"如何使用HttpSessionListener监听器"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"如何使用HttpSessionListener监听器"文章吧。

HttpSessionListener监听器

定义监听器

package lee; import javax.servlet.*;import javax.servlet.annotation.*;import javax.servlet.http.*;import java.util.*;@WebListenerpublic 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监听器应用场景

应用场景:用来统计当前在线人数

实现HttpSessionListener

import javax.servlet.ServletContext;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class MyHttpSessionListener implements HttpSessionListener {    @Override    public void sessionCreated(HttpSessionEvent httpSessionEvent) {        System.out.println("httpsession被创建");    }    @Override    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {        System.out.println("httpsession被销毁");     } }

登陆界面去创建HttpSessionListenter

<%@ page contentType="text/html;charset=UTF-8" language="java" %>      $Title$      <%    <%--    创建HttpSessionListenter--%>    request.getSession();  %>  

登出销毁HttpSessionListenter

<%@ page contentType="text/html;charset=UTF-8" language="java" %>      $Title$      <%<%--    销毁HttpSessionListener--%>    request.getSession().invalidate();  %>

已退出

实现统计登陆人数(多线程并发)

web.xml中配置监听

            MyHttpSessionListener                myServletContextListener    

统计人数实在最大ServletContextListener这个域当中

因为HttpSessionListener监听器只在当前会话中有效

(1)创建ServletContextListener监听器并设置初始值为0

import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class myServletContextListener implements ServletContextListener {    @Override    public void contextInitialized(ServletContextEvent servletContextEvent) {        ServletContext sc = servletContextEvent.getServletContext();        sc.setAttribute("count", 0);    }    @Override    public void contextDestroyed(ServletContextEvent servletContextEvent) {     }}

2)变更在线人数

import javax.servlet.ServletContext;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class MyHttpSessionListener implements HttpSessionListener {    @Override    public void sessionCreated(HttpSessionEvent httpSessionEvent) {        System.out.println("httpsession被创建");        countPersion( httpSessionEvent.getSession().getServletContext(), true);    }     @Override    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {        System.out.println("httpsession被销毁");        countPersion(httpSessionEvent.getSession().getServletContext(), false);    }      /*    * 变更在线的人数    * */    public void countPersion(ServletContext sc, boolean isAdd) {        // 为了防止多线程并发问题加锁        synchronized (sc) {            // 获得当前的在线人数            Integer count = (Integer) sc.getAttribute("count");            if(isAdd) {                sc.setAttribute("count", ++count);            } else  {                sc.setAttribute("count", --count);            }        }    }}

(3)前端页面上去获取显示

<%@ page contentType="text/html;charset=UTF-8" language="java" %>      $Title$      <%<%--    创建HttpSessionListenter--%>    request.getSession();  %>  

欢迎登陆


当前的在线人数 ${count} 退出

以上就是关于"如何使用HttpSessionListener监听器"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

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