千家信息网

如何使用HttpSessionListener监听器

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇"如何使用HttpSessionListener监听器"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面
千家信息网最后更新 2026年11月04日如何使用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监听器"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

监听 在线 监听器 人数 用户 内容 信息 登陆 统计 之间 场景 文章 方法 服务器 游客 知识 篇文章 线程 应用 服务 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技金融是不是互联网金融 科技平台互联网 互联网通讯科技 互联网科技视频 互联网金融科技创新 广西互联网科技公司 深圳市运趣互联网科技有限公司 昭通云南众福互联网科技有限公司 汽车互联网创新科技园 互联网科技项目计划书材料类 知域互联网科技有限公司大骗子 宜昌元轩互联网科技有限公司 消费医药和互联网科技 中国科技创新与世界互联网大会 科技赋能视角下互联网保险发展 2021互联网科技公司排名 互联网科技实习生岗位 九思连强互联网电子科技有限公司 互联网科技自媒体灵感 前海云享互联网科技 咖啡 今日互联网科技 互联网 卓越科技 中国航天科技大学国际工业互联网 青岛科技大学互联网大赛研究生 崇明区互联网教育科技售后服务 苏州铭阳互联网科技有限公司 上海同邻互联网科技有限公司规模 互联网高科技行业有哪些企业 万物互联网智能科技
0
<%=sessionId%> <%=online.get(sessionId)%>