广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现统计在线人数功能的方法详解
  • 878
分享到

Java实现统计在线人数功能的方法详解

2024-04-02 19:04:59 878人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 监听器的简介2. Java监听器的类型(1)ServletContextListener(2)httpsessionListener(3)ServletRequestLis

1. 监听器的简介

监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。

2. Java监听器的类型

(1)ServletContextListener

用于监听WEB,应用启动和销毁的事件

public void contextInitialized(ServletContextEvent sce):在初始化web应用时执行

 public void contextDestroyed(ServletContextEvent sce) {}:在销毁web应用时执行

(2)HttpSessionListener

用于监听Session对象的创建和销毁

public void sessionCreated(HttpSessionEvent se) {}:session创建的时候执行

public void sessionDestroyed(HttpSessionEvent se) {}: session被销毁的时候执行

(3)ServletRequestListener

用于监听Requset对象的创建和销毁

public void requsetCreated(HttpSessionEvent se) {}:requset创建的时候执行

public void requestDestroyed(HttpSessionEvent se) {}: requset被销毁的时候执行

(4)ServletContextAttributeListener

用于监听WEB作用域属性的改动,包括:增加属性、删除属性、修改属性

attributeAdded(ServletContextEvent sce):向ServletContext中添加属性时执行

attributeAdded(ServletContextRemoved sce):ServletContext中删除属性时执行

attributeReplaced(ServletContextRemoved sce):ServletContext中修改属性时执行

(5)HttpSessionAttributeListener

用于监听Session作用域属性的改动,包括:增加属性、删除属性、修改属性

(6)ServletRequestAttributeListener

用于监听Requset作用域属性的改动,包括:增加属性、删除属性、修改属性 

(7)HttpSessionActivationListener

用于监听某个对象在Session中的序列化和反序列化

3.监听器Listener实现统计人数功能 

(1)先创建监听器包listener在新建OnlineListener类

package listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionBindingEvent;
 
@WebListener()
public class OnlineListener implements ServletContextListener,HttpSessionListener, HttpSessionAttributeListener {

    private static int count=0;
 
    public OnlineListener() {//构造函数
    }
 
    // ServletContextListener的实现方法,在初始化web应用时执行,你可以在此处初始化server上下文相关数据
    public void contextInitialized(ServletContextEvent sce) {//应用初始化完成
   
    }
   
    // ServletContextListener的实现方法,在web应用关闭时执行
    public void contextDestroyed(ServletContextEvent sce) {
     
    }
 
    // HttpSessionListener的实现方法,session被创建的时候执行
    public void sessionCreated(HttpSessionEvent se) {//创建
        count++;
        ServletContext app = se.getSession().getServletContext();
        app.setAttribute("count",count);
    }


   // HttpSessionListener的实现方法,session被销毁的时候执行
    public void sessionDestroyed(HttpSessionEvent se) {
        count--;
        ServletContext app = se.getSession().getServletContext();
        app.setAttribute("count",count);
    }
}

(2)创建监听器servlet的接口

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
 
@WebServlet(name = "OnlineServlet",urlPatterns = "/online")
public class OnlineServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     this.doGet(request, response);
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      String op=request.getParameter("op");
      String result="";
      switch (op){
          case "login":
              //request.getSession()触发监听器的sessionCreated
              ServletContext app=request.getSession().getServletContext();
              int count= (int) app.getAttribute("count");
              result=String.fORMat("当前%d人在线",count);
              break;
          case "loGout":
              //销毁session,触发监听器的sessionDestroy
              request.getSession().invalidate();//销毁session
              result="您已经退出了!";
      }
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        out.write(result);
        out.close();
    }
}

4.Redis实现统计人数功能 

需求:平均访问时常,平均同时在线人数,最高同时在线人数

(1)先设计数据表:

开始访问页面时间,离开页面时间表:(id,place,ip,user_id,user_name, begin_time, end_time, env, info,len_min)

统计表:平均访问时常,平均同时在线人数,最高同时在线人数(id,day,age_len_visit_min, acu, pcu)

统计记录表:每分钟的同时在线人数。 (id,min_time, num)

(2)使用redis存储当前在线用户,每次调用可以看作浏览了一分钟(根据业务可以再细化,只需要定时任务记录上次一分钟和当前一分钟的用户,即可算出,某一个用户在某个页面的访问时常。

(3)同时记录用户开始访问页面时间,离开页面时间,即可分析出后续。

(4)为方便数据处理,可以记录每个页面每分钟的访问量。

(5)redis, 存储2个hash:

begin,定时器存储到的hash集合,记录详细信息

now,接口传递过来的用户访问集合,记录刷新时间

通过定时器来进行更新,刷新操作。

ps: hash中单独的key不可以自动设置过期,或者使用redis监听,使用String类型的key,监听是过滤,匹配到自己需要处理的再进行处理即可。

以上就是Java实现统计在线人数功能的方法详解的详细内容,更多关于Java统计在线人数的资料请关注编程网其它相关文章!

--结束END--

本文标题: Java实现统计在线人数功能的方法详解

本文链接: https://www.lsjlt.com/news/166386.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实现统计在线人数功能的方法详解
    目录1. 监听器的简介2. Java监听器的类型(1)ServletContextListener(2)HttpSessionListener(3)ServletRequestLis...
    99+
    2022-11-13
  • 用PHP来统计在线人数的四个方法详解
    本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了怎么实现统计在线人数的问题,可以利用表统计方式、用redis有序集合统计、用hyperloglog做统计等等,下面一起来看一下,希望对大家有帮助。一个业务系统网站每天人数的访问量是多少...
    99+
    2022-06-14
    php
  • Java基于servlet监听器实现在线人数监控功能的方法
    本文实例讲述了Java基于servlet监听器实现在线人数监控功能的方法。分享给大家供大家参考,具体如下:1、分析:做一个网站在线人数统计,可以通过ServletContextListener监听,当Web应用上下文启动时,在Servlet...
    99+
    2023-05-30
  • java多线程累加计数的实现方法
    题目 给定count=0;让5个线程并发累加到1000; 思路 创建一个类MyRunnable,实现Runnable(继承Thread类也可) 定义一个公共变量...
    99+
    2022-11-12
  • 详解php实现统计浏览量的方法
    随着互联网的迅速发展,网站的访问量也越来越成为一个关键的指标。网站管理员想要通过准确的统计数据了解访问者的行为和喜好,从而为网站的改进和优化提供有力的依据。而浏览量作为网站访问量的一个重要指标,如何准确地统计并分析浏览量就成为一个比较困扰管...
    99+
    2023-05-14
    php
  • MyBatisPlus+Lombok实现分页功能的方法详解
    目录一、Lombok1、添加Lombok依赖2、安装Lombok插件3、模型类上添加注解二、分页功能1、调用方法传入参数获取返回值2、设置分页拦截器3、运行测试程序一、Lombok ...
    99+
    2022-11-13
  • Python实现邮件发送功能的方法详解
    目录利用 python 发送普通邮件认识发送邮件流程认识邮件协议smtplib 模块email 包发送邮件小案例发送邮件的避坑总结邮件自动化篇章所需的新模块: smtplib 邮件协...
    99+
    2022-11-11
  • SpringCloud实现文件上传功能的方法详解
    目录图片上传搭建项目编写上传功能图片上传 刚才的新增实现中,我们并没有上传图片,接下来我们一起完成图片上传逻辑。 文件的上传并不只是在品牌管理中有需求,以后的其它服务也可能需要,因此...
    99+
    2022-11-13
  • .NET6实现基于JWT的Identity功能方法详解
    目录需求目标原理与思路实现引入Identity组件添加认证服务使用JWT认证和定义授权方式引入认证授权中间件添加JWT配置增加认证用户Model实现认证服务CreateToken方法...
    99+
    2022-11-12
  • MongoDB中数据的替换方法实现类Replace()函数功能详解
    近日接到一个开发需求,因业务调整,需要DBA协助,将MongoDB数据库中某集合的进行替换。例如我们需要将集合A中B字段中,有关《美好》的字符替换为 《非常美好》。个人感觉这个需求如果是在SQL Serve...
    99+
    2022-10-18
  • Python实现统计文章阅读量的方法详解
    目录前言实现代码效果图前言 写这次博客其实事出有因,前几天呢,一个非常优秀的学姐在QQ空间里晒了自己的CSDN博客的总阅读量,达到了7万+,很厉害了,而且确实她的博文都是精髓,我就也...
    99+
    2023-02-14
    Python统计文章阅读量 Python文章阅读量 Python 文章 阅读量
  • PHP开发点餐系统的在线点餐功能实现方法是什么?
    PHP开发点餐系统的在线点餐功能实现方法是什么?随着互联网的发展,越来越多的餐饮企业开始注重在线点餐服务的开发。而PHP作为一种广泛应用于Web开发的开源脚本语言,具有开发周期短、开发成本低、可扩展性强等优势,因此成为了很多餐饮企业选择的主...
    99+
    2023-11-01
    PHP 在线点餐 点餐系统
  • Go语言开发点餐系统中的在线支付功能实现方法
    Go语言开发点餐系统中的在线支付功能实现方法,需要具体代码示例随着互联网技术的迅猛发展,越来越多的商家将线下的点餐服务转移到了线上。在开发一个点餐系统时,实现在线支付功能是非常重要的一环。本文将介绍如何使用Go语言来实现点餐系统中的在线支付...
    99+
    2023-11-01
    在线支付:支付 开发:开发 点餐系统:点餐
  • WPF仿微信实现截图功能的方法详解
    目录前言 一、ScreenCut.cs 代码如下二、ScreenCut.xaml 代码如下 三、ScreenCutExample.xaml 代码如下每日一笑 肚子...
    99+
    2022-11-13
  • 前端实现打印功能的两种方法详解
    目录前言方法一:window.print()   方法二:利用iframe,iframe.contentWindow.print()补充:导出步骤总结:前言 前端...
    99+
    2023-01-06
    前端实现打印功能 前端打印语句 前端打印功能实现
  • vue数字金额动态变化功能实现方法详解
    目录1 前言2 数字动态滚动2.1 计时器实现2.2 动画帧实现3 总结1 前言   在某些场景中,要求我们能够动态与用户进行交互,如页面加载一个数字的时候,动态...
    99+
    2022-11-13
  • Java使用线程池实现socket编程的方法详解
    目录前言一、一个简单的C/S模型实现1.服务器:2.客户端:二、线程池使用方法1.新建一个线程池2.用Runnable接口实现线程3.创建线程对象并提交至线程池执行三、结合起来四、使...
    99+
    2022-11-13
  • Java实现线程按序交替执行的方法详解
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目:有a、b、c三个线程,使得它们按照abc依次执行10次。 二、解题思路 控制执行线程变量flag,利用lock锁来保证线程...
    99+
    2022-11-13
  • Pandas实现两个表的连接功能的方法详解
    目录准备数据先导入模块输出内容连接内连接外连接左连接右连接上次介绍了pandas的多条件筛选,这些都是一些数据处理的必要技能,也不贪多,咱们每次学习一点。 这次咱们说说pandas的...
    99+
    2022-11-11
  • Java前后端分离的在线点餐系统实现详解
    项目功能: 此项目分为两个角色:普通用户和管理员。普通用户有登录注册、浏览商品信息、添加购物车、结算订单、查看个人信息、查看个人订单详情等等功能。管理员有管理所有商品信息、管理所有订...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作