资讯专栏INFORMATION COLUMN

监听器实栗 在线人数统计

CloudwiseAPM / 2177人阅读

摘要:实现思路常见的流程是标准的即登录表单用户提交数据到登录检查若登录检查通过以后触发事件保存进入在线人员列表中页面跳转到在线用户列表若用户注销从在线列表中删除代码如下使用集合即集合去重原因内部存储为的键值对为由于哈希表的特征即可去重项目结构

实现思路

常见的流程是,标准的mvc 即 登录表单,用户提交数据到登录检查,若登录检查通过以后,触发session事件,保存进入在线人员列表中,页面跳转到在线用户列表,若用户注销,从在线列表中删除.

代码如下
使用set集合, 即 set集合去重 原因 内部存储为map,mqp的键值对为hashcode 由于哈希表的特征 即 set可去重
项目结构

创建迭代器
package com.ming.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.util.Set;
import java.util.TreeSet;

// 对servlet 上下文监听
public class OnlineUserList implements HttpSessionAttributeListener, HttpSessionListener, ServletContextListener {
    private ServletContext servletContext = null;
    // 增加session属性的时候,触发事件
    // session 属性增加
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        Set all = (Set)this.servletContext.getAttribute("online");
        all.add(httpSessionBindingEvent.getValue());
        this.servletContext.setAttribute("online", all);
    }

    // 用户注销登录
    // session 属性删除
    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        Set all = (Set)this.servletContext.getAttribute("online");
        all.remove(httpSessionBindingEvent.getValue());
        this.servletContext.setAttribute("online", all);
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {

    }

    // 上下文初始化
    // 初始化
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        // 获得上下文实栗
        this.servletContext = servletContextEvent.getServletContext();
        // 设置保存set集合
        this.servletContext.setAttribute("online", new TreeSet());
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {

    }

    // session 销毁
    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        Set all = (Set)this.servletContext.getAttribute("online");
        all.remove(httpSessionEvent.getSession().getAttribute("id"));
        this.servletContext.setAttribute("online", all);
    }
}
配置文件



  Archetype Created Web Application
    
        com.ming.listener.OnlineUserList
    
    
        LoginFile
        com.ming.filter.LoginFile
    
    
        LoginFile
        /index.jsp
    
    
        login
        com.ming.servlrt.LoginServlet
    
    
        login
        /loginServlet
    

在线用户统计
<%@ page import="java.util.Set" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="javax.swing.text.html.HTMLDocument" %><%--
  Created by IntelliJ IDEA.
  User: ming
  Date: 19-3-17
  Time: 上午4:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


您已经登录
显示用户在线
<%
    Set all = (Set)super.getServletContext().getAttribute("online");
    Iterator iterator = all.iterator();
    while(iterator.hasNext()){
        %>
            <%=iterator.next()%>
        <%
    }
%>


运行效果

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73747.html

相关文章

  • 听器应用【统计网站人数、自定义session扫描器、踢人小案例】

    摘要:现在,我们想要统计的是网站的在线人数。隔一段时间去做某事,这肯定是定时器的任务呀。定时器应该在服务器一启动的时候,就应该被创建了。定时器扫描容器的时候,可能是获取不到所有的的。 从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器。这篇博文主要讲解的是监听器的应用。 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了,就在Ses...

    Awbeci 评论0 收藏0
  • Spring Boot 的简单教程(八)拦截器,过滤器,听器

    摘要:当过滤器有注入其他类时,可直接通过的方式进行实体类过滤器,这样不可自动注入过滤器使用的其他类。就是先简单的记录一下拦截器,过滤器和监听器的简单使用方法,后期如果有详细的使用方法,再来更新本文。 很多时候我们都想要做一些与业务逻辑无关的事情,比如统计在线人数,筛选登陆账号,统计页面浏览量等等。。。这时候我们就需要用到今天讲到的这些工具了。 首先我们先看一下拦截器 我们需要先自定义...

    SKYZACK 评论0 收藏0
  • 消息推送异常重发需要注意的点(上篇)

    摘要:无证连接进行异常记录并关闭连接。离线消息检测到上线立即推送这是消息推送需要实现的基本功能之一了,详见代码。主要功能协助进行初始化,心跳包检测,断线自动重连消息推送的第二种方式在下篇中再编写 消息重发中需要注意的问题 由于最近工作中接触了比较多关闭消息推送以及异常重发机制的问题,终于得空总结一下经验 目前接触的消息推送分为两种 主动推送:一般为websocket建立长连接实现,此处网上...

    terro 评论0 收藏0
  • jsp 实栗 jsp + jdbc 登录

    摘要:实栗实现登录实现思路一个表单页,输入用户登录和密码,然后信息提交到页面进行验证,如果可以服务器跳转到登录成功页,失败,跳转到错误页跳转的时候窗口的地址会发生变化代码如下编写登录代码登录登录登录操作用户登录登录登录密码登录重置登录处理 jsp 实栗 jsp + jdbc 实现登录 实现思路 一个表单页,输入用户登录和密码,然后信息提交到jsp页面进行验证,如果可以服务器跳转到登录成功页,...

    YacaToy 评论0 收藏0

发表评论

0条评论

CloudwiseAPM

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<