1)创建一个OnLineCountListener监听器,统计在线人数

package xqyy.com.listener;

import java.util.ArrayList;
import java.util.List;

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;

public class OnLineCountListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

//声明一个servletContext对象
private ServletContext application=null;

@Override
public void attributeAdded(HttpSessionBindingEvent hsbe) {
//如果登录成功,则将用户名保存在列表中
List l=(List) this.application .getAttribute("alluser");
l.add(hsbe.getValue());
this.application.setAttribute("alluser", l);
}

@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub

}
//context删除时激发
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub

}
//初始化时激发
@Override
public void contextInitialized(ServletContextEvent sce) {
//容器初始化时,向application中存放一个容器
this.application=sce.getServletContext();
this.application.setAttribute("alluser", new ArrayList());
}

@Override
public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub

}

@Override
public void sessionDestroyed(HttpSessionEvent se) {
//将用户名称从列表中删除
List l=(List) this.application.getAttribute("alluser");
String value=(String) se.getSession().getAttribute("uname");
l.remove(value);
this.application.setAttribute("alluser", l);
}

}

2)创建一个online.jsp

<%@page contentType="text/html"% import="java.util.*">
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
    <div id="one">
    <div id="two">
    <h3>欢迎登录</h3>
    <form action="online.jsp" method="post">
    用户名:<input type="text" name="name" style="width: 110px;" />
    <br />
    密     码:<input type="password" name="password" style="width: 110px;" />
    <br />
    <br />
    <input type="submit" name="commit" value="登录" style="color: blueviolet;" />
    <a href="logout.jsp">注销</a>
    </form>
    </div>
    <div id="three">
    <!--向session接受输入的用户名-->
    <%
    request.setCharacterEncoding("UTF-8");
    if(request.getParameter("name")!=null){
    session.setAttribute("uname",request.getParameter("name"));
    }
    %>
    <h2>在线人员</h2>
    <% 
    List l=(List) application.getAttribute("alluser");
    Iterator iter=l.Iterator();
    while(iter.hasNext()){
    %>
    <li><%=iter.next()%></li>
    <% } %>
    <p>当前在线的用户数:<%=l.size() %></p>
    </div>
    </div>
  </body>
</html>

3)创建logout.jsp页面实现用户注销

<body>

<%

sesion.invalidate()

%>

<a href="online.jsp">再次进入系统</a>

4)最后,在web.xml文件中配置监听

<listener>
<listener-class>xqyy.com.listener.OnLineCountListener</listener-class>
</listener>

java创建一个统计在线人数的监听器相关推荐

  1. Java如何实现统计在线人数的功能?

    很多人在笔试或者面试中问到:现在要你实现一个统计在线人数的功能,你该怎么设计? 不知道的朋友,这篇文章告诉你. 先说答案:可以利用监听器Listener来实现 目录 1. 监听器的简介 2. Java ...

  2. java创建一个不可变对象_使用不可变对象创建值对象

    java创建一个不可变对象 在回答我最近的文章中AutoValue:生成的不可变的值类 , 布兰登认为,这可能是有趣的,看看如何AutoValue比较项目Lombok和Immutables和凯文借调这 ...

  3. java创建临时文件_用Java创建一个临时文件

    java创建临时文件 The task is to create a temporary file in Java. 任务是用Java创建一个临时文件. Creating a temporary fi ...

  4. java订单类_基于Java创建一个订单类代码实例

    这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订 ...

  5. java订单类_使用Java创建一个订单类代码实例

    这篇文章主要简介了使用Java创建一个订单类代码实例,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 需求描述 定义一个类,描述订单信息 订单id ...

  6. java创建一个不可变对象_如何在Java中创建不可变类?

    java创建一个不可变对象 Today we will learn about the immutable class in Java. What are immutable classes? The ...

  7. 用java创建一个最简单的窗口

    如何使在创建窗体前,需要导入相关的 ​package​ 包. import java.awt.*; import javax.swing.*; 使用​new​关键词来创建一个窗体对象 JFrame j ...

  8. Java 创建一个线程的三种方式

    Java 创建一个线程的三种方式 更多内容,点击了解: https://how2j.cn/k/thread/thread-start/353.html 创建多线程有3种方式,分别是继承线程类,实现Ru ...

  9. java创建一个图片_Java 创建一个简单的验证码图片

    代码如下: package lixin.gan.test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2 ...

最新文章

  1. java decodeurl,java decodeURIComponent
  2. 生成随机字符串的几种常用方式
  3. 计算机网络·物理层练习题
  4. 【自动驾驶】毫米波雷达相关知识专题
  5. MybatisPlus条件构造器说明以及selectPage方法
  6. 【Python入门】一个有意思还有用的Python包-汉字转换拼音
  7. 割平面法只能求解纯整数规划吗_【DMC第四讲】整数规划
  8. [树形dp] Jzoj P1046 寻宝之旅
  9. UVA 1160——X-Plosives
  10. 《软件工程(第4版?修订版)》—第1章1.5节 系统的方法
  11. java 反射 成员变量_Java 反射:成员变量
  12. python批量打印机excel_python批量设置多个Excel文件页眉页脚的脚本
  13. 关于C++中ios::sync_with_stdio(false)
  14. linux mail使用笔记
  15. 财务有必要学python吗-工作三年却被实习生抢了饭碗,学会Python到底有多吃香?...
  16. java 写文件 并发_记录一次Java文件锁引起的并发写文件问题
  17. MATLAB机械动力分析,用MATLAB实现机械动力学
  18. 从0开始Go语言,用Golang搭建网站
  19. 讲解后台管理系统之列表设计分享
  20. Groovy脚本基础全攻略

热门文章

  1. Android Edittext只能输入汉字和英文
  2. 给苹果系统设定锁屏快捷键
  3. 工业用微型计算机实践,工业用微型计算机实践课程考核试卷一
  4. Edge浏览器兼容性问题,报错误代码:STATUS_INVALID_IMAGE_HASH的解决方法
  5. 【iOS】熟悉Objective-C
  6. boss直聘一句话介绍优势_安家结局:徐姑姑一句话暴露“隐藏身份”,最大boss即将上线...
  7. python脚本:excel多列转为一列
  8. 快捷指令批量发送短信
  9. 【AD18】边框设置
  10. oracle查询字体,客户端为Oracle 11g 查询中文字体 显示乱码