php监听器session,Servlet HttpSessionListener监听器统计网站在线人数

news/2024/5/15 14:51:46/文章来源:https://blog.csdn.net/weixin_32401411/article/details/116436100

在许多网站或者软件应用中都有统计当前在线人数这一功能。在通常情况下,当一个用户进入网站时就会创建一个 HttpSession 对象,而当用户离开网站时,HttpSession 对象就会被销毁。

在 Servlet 的八种监听器中,HttpSessionListener 监听器就可以监听 Web 应用中 HttpSession 对象的创建和销毁过程。因此,可以使用实现了 HttpSessionListener 接口的监听器统计网站的当前在线人数。下面将分步骤讲解如何使用监听器统计网站当前在线人数。

1. 创建监听器

在 filterDemo01 项目的 com.mengma.listener 包中,创建一个实现了 HttpSessionListener 接口的监听器类 OnlineListener,在该类中编写用于实现统计网站在线人数的代码,如下所示。

package com.mengma.listener;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class OnlineListener implements HttpSessionListener {

private int count = 0; // 用于统计在线人数

@Override

public void sessionCreated(HttpSessionEvent hse) {

count++; // Session对象创建时count变量加1

ServletContext context = hse.getSession().getServletContext();

context.setAttribute("count", new Integer(count));

}

@Override

public void sessionDestroyed(HttpSessionEvent hse) {

count--; // session对象销毁时count变量减1

ServletContext context = hse.getSession().getServletContext();

context.setAttribute("count", new Integer(count));

}

}

在 OnlineListener.java 中,首先定义了一个用于统计在线人数的成员变量 count。当每次监听到 HttpSession 对象创建时,count 成员变量会加 1。当每次监听到 HttpSession 对象销毁时,count 成员变量会减 1。

在每次修改 count 成员变量后,还应该将 count 成员变量的值保存到 ServletContext 对象中,以便其他 JSP 页面程序可以从 ServletContext 对象中取出 count 成员变量,从而在页面上显示当前在线用户数量。

在 web.xml 文件中,配置 OnlineListener 事件监听器,具体代码如下:

com.mengma.listener.OnlineListener

需要注意的是,这个 HttpSession 对象在不活动时的最长存活时间仍然是 2min。

2. 创建首页和注销页面

1)实现首页

在项目的 WebContext 目录中,创建一个名称为 index.jsp 的页面,该页面用于保存在 ServletContext 对象中的 count 变量值,即相当于显示当前在线人数,如下所示。

pageEncoding="utf-8"%>

首页

当前在线人数为:

">退出登录

2)实现注销页面

在项目的 WebContext 目录中,编写注销页面 logout.jsp,logout.jsp 页面用于使当前 Session 对象失效,即完成用户注销功能,如下所示。

pageEncoding="utf-8"%>

注销页面

您已退出本系统

3. 运行项目并查看结果

启动 Tomcat 服务器,在浏览器的地址栏中输入地址 http://localhost:8080/filterDemo01/index.jsp 访问 index.jsp 页面,然后再分别开启两个不同的浏览器窗口(如火狐和谷歌浏览器)同时访问 index.jsp 页面(目的是防止同一个浏览器共享同一个Session会话),此时,各个浏览器窗口中显示的结果如图 1 所示。

3d3618b4c05ae7a951c91211b559befc.png

图 1  login.jsp页面

单击图 1 中任意一个浏览器窗口中的“退出登录”超链接,都会访问 logout.jsp 页面,而 logout.jsp 页面中的 session.invalidate() 语句会使当前 Session 失效,从而触发 HttpSession 对象的销毁事件并调用监听器 OnlineListener 中的 sessionDestroyed() 方法,使统计用户数量的 count 变量减 1。

然后,刷新其余的浏览器窗口,此时,各个浏览器窗口中显示的结果如图 2 所示。

c57884379313450156994a9ca4d3a640.png

图 2  logout.jsp页面

从图 2 中可以看出,谷歌浏览器中的用户已被注销,而其余两个浏览器窗口中的在线人数显示为2。

需要注意的是,如果直接关闭图 2 所示的某个浏览器窗口或保持浏览器窗口不刷新,与之对应的 HttpSession 对象会在 2 分钟之后才被销毁,即统计的在线人数的 count 变量会在 2 分钟后自动减 1。因此,可以说明网站统计的在线人数并不是真正意义上的并发访问人数,而是指某一个时间段内的访问人数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_773149.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站部署到linux 在进行压测,在Linux CentOS上搭建Jmeter压测环境

本文的主要内容是介绍如何在Linux CentOS 服务器上面搭建Jmeter的压测环境整个详细的流程,来满足我们日常工作中对于压力测试环境搭建、压力测试执行过程的需求。一、首先我们要准备四个东西,在搭建环境的时候需要使用到1、Xshell、puTTy等终端连接工具(…

哪种营销方法效果最差_百度推广网站怎么做营销?4个方法营销效果好

百度平台发展到现在已拥有超过亿万用户,所以每个企业都想在百度平台上搭建网站,当然不管搭建什么类型的网站都有99.9%的企业是希望有人来看,而且是越多越好,这样可能会在短时间实现曝光和流量转化的。那么,有两个问题&…

PHP占网站开发比例,最新报告78.7%网站的服务器端编程语言使用PHP,Python仅占1.4%...

根据w3techs官方显示,78.7%网站的服务器端编程语言使用PHP,其次是ASP.NET占比10.5%,第三是Java占比3.5%,Python则排名在第七占比1.4%。网站的服务器端编程语言使用占比相比前两年网站的服务器端编程语言PHP占比有所下降…

windos php7 fast cgi,FAST-CGI解析漏洞拿下网站并提权windows系统服务器

作为一个懒散的人,我比较喜欢关注网上发布的漏洞。利用最新的漏洞可以比较简单的得到webshell,然后利用webshell提权拿下服务器,这个是我最喜欢的。有一个很有意思的娱乐网站,我经常登陆浏览,以前就有拿下这个网站的想…

网站24小时监控服务器,24小时监控服务器

24小时监控服务器 内容精选换一换24小时监控服务器 相关内容本章节指导用户查看主机监控指标,监控指标分为Agent插件采集的细颗粒度的操作系统级别监控指标和ECS自带的监控指标。操作系统监控指标和基础监控指标请参见支持监控的服务列表。已完成Agent插件的安装。安…

服务器怎么修改主题,wordpress网站更换主题改版网站

在建立好了一个网站,并运营了较长时间之后,网站的内容已经非常丰富了,但随着网站运营时间的进行,以及访问用户的积累,很多时候之前的网站版面、以及一些用户体验都是需要进行改进的,因此当到达一个时间节点…

好用的图标网站

https://www.iconfont.cn/collections/index?spma313x.7781069.1998910419.da2e3581b&type1

pycharm新建Django项目与Django网站的新建

用manage.py 快速创建网站所有环境:(对django来讲所有的网站都是app) python manage.py startapp django_web#django_web是你的网站名DjangoMTV模型:

好用的数据结构网站

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

python 制作网页 选择题_Python爬取天眼查网站的方法大全

以下链接都来自知乎问答python如何通过请求json文件,实现高效爬取动态加载页面? 完整模拟http请求即可,推荐requests库,写程序自动生成requests就行了。我现在的分布式爬虫系统就是这个策略,各大OTA都抓过了&#xff0…

python画太极八卦图_「太极八卦图」使用HTML+CSS画太极八卦图 - seo实验室

太极八卦图使用HTMLCSS画太极八卦图基本语法CSS基本语法格式:选择符{属性1:属性值1;属性2:属性值2;属性3:属性值3;......}选择符:1.元素选择器:找到同名一系列2.类选择器:找到同类名一系列定义:web前端开发1调用:.p1{属性1:属性值1;属性2:属性值2;属性3:属性值3;......}3.id选择…

zblog php建站教程_Z-BlogPHP主题制作教程

很早就想写这个教程了,不过由于时间的问题,被一值耽搁了。其实我在刚接触zblog的时候,在网上搜索过主题的制作教程,结果很不理想,没找到一个详细的教程;自己也是一边摸索一边做,后来虽然做出了一…

php 生成html工具seo6,AtoZ SEO Tools v2.6 – PHP搜索引擎优化工具

释放双眼,带上耳机,听听看~!该源码已亲自测试可以安装使用源码简介隐藏内容,您需要满足以下条件方可查看End在线演示隐藏内容,您需要满足以下条件方可查看End功能简介隐藏内容,您需要满足以下条件方可查看E…

代码命名网站

https://unbug.github.io/codelf/

堆积密度怎么做_[SEO优化]关键词究竟应该怎么优化?

一、关键词分布seo关键词优化中,关于挖掘关键词这一块,在这里就不讲了。先讲一下关键词在各个页面如何布局的。网站首页一般选3到5个关键词,其它每个栏目页面选2到3个关键词。原则上讲,网站首页一般放难度稍高一点的关键词&#x…

java 电子杂志_java毕业设计_springboot框架的时尚电子杂志网站设计

这是一个基于java的毕业设计项目,毕设课题为springboot框架的时尚电子杂志网站设计, 是一个采用b/s结构的javaweb项目, 开发工具eclipsei/eclipse, 项目框架jspspringbootmybatis, 时尚电子杂志网站设计采用mysql进行数据存储, 并基于mybatis进行了orm实体关系映射, 该时尚电子…

[翻译]避免常见 ASP.NET 缺陷,使网站平稳运行

Keep Sites Running Smoothly By Avoiding These 10 Common ASP.NET PitfallsBy Jeff Prosise通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行作者:Jeff Prosise --------------------------------------摘自 MSDN Magazine 的 2006 年 7 月 刊。This article d…

怎么创建一个自己的网站并从外网可以访问

这个问题是很多新手喜欢问的,譬如大学生想做个自己的博客或者搞个班级图片站什么的,一来可以装个X,二来也算是有个自己定义的域名搞搞小业务什么的。那么怎么才能有个属于自己的网站(企业邮箱)呢。 一:申请…

谷歌站长管理工具 -- 方便SEO与恶意软件检测

今天,朋友在Google推广的网站,管理台告知存在恶意代码,不能被收录,所以向我求救。因为之前一直专注开发,没有处理过这些问题。所以上网搜到了一个很好用的东西。Google的站长管理工具。地址:https://www.go…

一个网站的组成[信息图]

在信息爆炸的时代,我们每天通过网页获得各种各样的信息,但是,一个网站到底由哪些部分组成,你都了解吗?好吧,我们会通过下面的信息图来展开一个小科普,让你对网站的内部结构更加了解。&#xff0…