首页 > 编程语言 >JavaWeb对于Listener的运用详解【利用Session统计在线人数】

JavaWeb对于Listener的运用详解【利用Session统计在线人数】

时间:2022-12-11 23:36:26浏览次数:50  
标签:omlinecount JavaWeb Listener Session 监听器 Integer 人数 在线

一.监听器Listener

1.1 Listener的作用

Listener是一个功能组件,在创建、销毁或添加、修改或删除应用程序、会话和请求对象的属性时自动执行代码。

监听器是servlet的监听器,它可以监听客户端的请求和服务器的操作。

可以使用application,session,request这三个对象

1.2 小demo之统计在线人数

1.新建omline,继承类HttpSessionListener,重写sessionCreated和sessionDestroyed方法:

public class omline implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent se) {

    }
    public void sessionDestroyed(HttpSessionEvent se) {
    }
}

2.对于sessionCreated方法:

创建Session监听,可以查看用户的一举一动。一旦创建Session就会触发这个方法!

对于sessionDestroyed方法:

销毁session监听。一旦销毁Session就会触发这个方法!

3.创建servletContext对象,新建OnlineCount键值对。

ServletContext servletContext = se.getSession().getServletContext();
Integer omlinecount = (Integer) servletContext.getAttribute("OnlineCount");

判断当前在线人数,如果omlinecount为空的话,更新当前的在线人数为1。

if(omlinecount==null){
    omlinecount=new Integer(1);
}

如果现在人数不为空的话,将当前的人数加一。

else{
    int count = omlinecount.intValue();
    omlinecount=new Integer(count+1);
}

将当前人数存入键值对:

servletContext.setAttribute("OnlineCount",omlinecount);

4.销毁session监听:

前面的代码基本一样,唯一不同的是,对于空值的判断和非空的人数计算。

对于当前对象为空时,将其赋值为0。

if(omlinecount==null){
    omlinecount=new Integer(0);
}

当其不为0时,将其人数减一:

else{
    int count = omlinecount.intValue();
    omlinecount=new Integer(count-1);
}

5.注册监听器,注册监听器只需要一句话,如下:

<listener>
    <listener-class>main.java.omline</listener-class>
</listener>

6.在访问的主页面写下jsp语句,引入java对象的值,实现输出当前的在线人数。


    当前有<span><%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%>人在线</span>

7.启动服务器,访问主页,得到结果如下:

image-20220903105938658

1.3 统计结果错误原因分析

寻找原因,找到omline里的sessionCreated方法,写一下输出所有Session的ID

System.out.println(se.getSession().getId());

运行项目,观察输出台:

9DF74823455F36EDA429B31938B5EEE5
2D248509C732D5C448DA1E57BE539E97

打开F12,网络查看该用户的Session:

image-20220903121930476

可以看到,现在的Session是控制台输出的最后一个,说明第一个链接失败,已经被销毁了。

如果我们重新发布改页面:

image-20220903122045485

刷新改页面,继续打开Session观察如下:现在就变为了一人!

image-20220903122209909

注意:

如果我们使用一个游览器两个页面都访问该路径,还是属于一个任务的,在线人数算做一人。

如果我们打开不同的游览器来访问该url,这个这时候就会算做不同的用户,分配不同的Sessionid给用户。

步骤:

1.实现监听器的接口。重写里面的方法!

2.配置监听器(xml里注册监听器)。

标签:omlinecount,JavaWeb,Listener,Session,监听器,Integer,人数,在线
From: https://blog.51cto.com/u_15568258/5928916

相关文章

  • JavaWeb
    JavaWeb1、基本概念1.1、前言web开发:web,网页的意思,www.baidu.com静态webhtml,css提供给所有人看的数据始终不会发生变化!动态web淘宝,几乎所有的网站都是动态......
  • JSP改造Cookie案例以及Session的快速入门
    JSP改造Cookie案例以及Session的快速入门<%@pageimport="java.util.Date"%><%@pageimport="java.text.SimpleDateFormat"%><%@pageimport="java.net.URLEncode......
  • cookie&session使用方式
    cookie:数据存在客户端(浏览器),长期储存session:数据存在服务器,默认保存30分钟cookie使用方式:  1.创建cookie对象并用response发送Cookiecookie=newCookie("us......
  • Django只session
    1.session流程2.添加sessiondefindex(request):#添加sessionrequest.session["set_session"]="defaulit001"returnHttpResponse("测试效能")设置s......
  • 使用JavaWeb进行增删改查操作
    一、基本环境准备1、配置pop.xmlpop文件可以直接复制使用不作修改,也可以根据自己的需求进行增删依赖和插件 1<?xmlversion="1.0"encoding="UTF-8"?>2<project......
  • EventTarget.addEventListener() - Web API 接口参考
    EventTarget.addEventListener()-WebAPI接口参考  ​​https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener#%E8%AF%AD%E6%B3%95​​ ......
  • javascript: addEventListener对事件冒泡和事件捕获的处理演示(chrome 108.0.5359.98)
    一,js代码<html><head><metacharset="utf-8"/><title>测试</title></head><bodystyle="padding:0px;margin:0px;"><buttonid="btn">点击</button>......
  • 判断session 方法
    一.在每个页面的page_load()方法中判断If(Session[“UserId”]!=null){//登陆成功的情况}Else{//response.write(“<script>alter(‘请登陆’);</script>”);}//这......
  • javaweb5
    JSP1.产生1.1servlet的不足Servlet是一个动态网页技术,客户端通过请求Servlet类可以相应给客户端一个动态网页,但是Servlet在使用过程中有什么不足之处呢?开发方式麻......
  • JavaWeb-CSS
    JavaWeb-CSS1概述CSS是一门语言,用于控制网页表现。我们之前介绍过W3C标准。W3C标准规定了网页是由以下组成:结构:HTML表现:CSS行为:JavaScriptCSS也有一个专业的名......