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作用域(生命周期)
JavaWeb(入门篇19)监听器listener实现在线人数统计。_第1张图片

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("

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.映射

  
  <servlet>
    <servlet-name>ListenerTest01servlet-name>
    <servlet-class>com.bmft.listener.ListenerTest01servlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>ListenerTest01servlet-name>
    <url-pattern>/ListenerTest01url-pattern>
  servlet-mapping>
  
  <listener>
    <listener-class>com.bmft.listener.Listener01listener-class>
  listener>
  <session-config>
    <session-timeout>1session-timeout>
  session-config>

5.页面展示

JavaWeb(入门篇19)监听器listener实现在线人数统计。_第2张图片
JavaWeb(入门篇19)监听器listener实现在线人数统计。_第3张图片

二、错误 与解决

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.

解决:
JavaWeb(入门篇19)监听器listener实现在线人数统计。_第4张图片

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

web.xml

  <session-config>
    <session-timeout>1session-timeout>
  session-config>

3.为何session无变化?

待解决。。。。

你可能感兴趣的:(JavaWeb)