JavaWeb(入门篇19)监听器listener实现在线人数统计。

一、监听器listener实现在线人数统计。

1.实现功能

实现HttpSessionListener接口,写一个监听类,完成对网站在人数的监听

2.核心代码

记录所有用户的数据,把生命期提取到 Application (ServletContext)层。

        if (context.getAttribute("onlineUsers")!=null){
            context.setAttribute("onlineUsers",(Integer)context.getAttribute("onlineUsers")+1);
        }
3.框架

1.ServletContext作用域(生命周期)
在这里插入图片描述

4。代码

1.测试类,显示人数的页面

package com.bmft.listener;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 监听器的测试类,展示在线时间
 */
public class ListenerTest01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("<h1>onlineUser = " +
                this.getServletContext().getAttribute("onlineUsers"));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2.监听类,实现监听

package com.bmft.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 实现HttpSessionListener接口,
 * 写一个监听类,完成对网站在人数的监听
 */
public class Listener01 implements HttpSessionListener {
    private ServletContext context = null;
    //当一个用户打开网站的时候开启创建session执行的方法
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
         context = httpSessionEvent.getSession().getServletContext();
        if (context.getAttribute("onlineUsers")!=null){
            context.setAttribute("onlineUsers",(Integer)context.getAttribute("onlineUsers")+1);
        }
        else {
            context.setAttribute("onlineUsers", 1);
        }
        System.out.println("=====有一位用户上线了=====");
        System.out.println("Id: "+httpSessionEvent.getSession().getId()+"=====");
    }
    //关闭网站的时候销毁session执行的的方法
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        context = httpSessionEvent.getSession().getServletContext();
        if (context.getAttribute("onlineUsers")!=null){
            context.setAttribute("onlineUsers", 0);
        }
        else {
            context.setAttribute("onlineUsers",(Integer)context.getAttribute("onlineUsers")-1);
        }
        System.out.println("=====用户下线了=====");
        System.out.println("Id: "+httpSessionEvent.getSession().getId()+"=====");
    }
}

3.映射

  <!--监听器测试类ListenerTest01映射-->
  <servlet>
    <servlet-name>ListenerTest01</servlet-name>
    <servlet-class>com.bmft.listener.ListenerTest01</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ListenerTest01</servlet-name>
    <url-pattern>/ListenerTest01</url-pattern>
  </servlet-mapping>
  <!--监听映射-->
  <listener>
    <listener-class>com.bmft.listener.Listener01</listener-class>
  </listener>
  <session-config>
    <session-timeout>1</session-timeout>
  </session-config>
5.页面展示

在这里插入图片描述
在这里插入图片描述

二、错误 与解决

1.无法联网下载

在这里插入图片描述
错误信息

Cannot access aliyunmaven (https://maven.aliyun.com/repository/public) in offline mode and the artifact org.apache.maven.plugins:maven-jar-plugin:pom:2.4 has not been downloaded from it before.

解决:
在这里插入图片描述

2.如何实现session的自动超时自动销毁

web.xml

  <session-config>
    <session-timeout>1</session-timeout>
  </session-config>
3.为何session无变化?

待解决。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JarvanStack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值