统计在线用户数案例

  我们在很多网站上都可以看到一个当前在线用户数量的统计,这个功能就是使用监听器实现的。下面我们来实现这个功能。

第一步:创建ServletContext域对象的监听器

  当我们的服务器打开后,ServletContext对象就被创建了,这个时候用户就可以进行访问了,所以我们可以在ServletContext监听器中对计数器进行初始化设置。

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class OnlineServletContextListener implements ServletContextListener {
    //监听ServletContext域对象的创建
    public void contextInitialized(ServletContextEvent sce)  { 
         //获取Context域对象
        ServletContext context = sce.getServletContext();
        //初始化计数器
        context.setAttribute("count", 0);
    }

    public void contextDestroyed(ServletContextEvent sce)  { 
         // TODO Auto-generated method stub
    }
    
}

第二步:创建Session域对象的监听器

  session对象默认在用户打开网页的时候创建,所以我们对session对象的创建与销毁进行监听,当session对象被创建的时候,计数器就加一,当session对象被销毁的时候,计数器就减一。

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

public class OnlineHttpSessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent se)  { 
        //获取ServletContext对象
        ServletContext context = se.getSession().getServletContext();
        //获取计数器
        Object obj = context.getAttribute("count");
        int count = Integer.parseInt(obj.toString());
        //计数器加一
        count++;
        //替换原来计数器的值
        context.setAttribute("count", count);
    }

    public void sessionDestroyed(HttpSessionEvent se)  { 
        //获取ServletContext对象
        ServletContext context = se.getSession().getServletContext();
        //获取计数器
        Object obj = context.getAttribute("count");
        int count = Integer.parseInt(obj.toString());
        //计数器减一
        count--;
        //替换原来计数器的值
        context.setAttribute("count", count);
    }
    
}

第三步:创建销毁session对象的Servlet

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

public class LogoutServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取session对象
        HttpSession session = request.getSession();
        //销毁session对象
        session.invalidate();
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

第四步:获取用户在线数量

  创建一个Online.jsp页面,获取用户在线数量并展示。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


    

当前用户数量:${count }

注销

结果展示

我们先打开一个浏览器访问jsp页面

统计在线用户数案例_第1张图片
在线1

然后再打开一个浏览器访问jsp页面
统计在线用户数案例_第2张图片
在线2

刷新第一次打开的浏览器页面
统计在线用户数案例_第3张图片
在线2

注销第二次打开的页面,然后再次刷新第一次打开的页面
统计在线用户数案例_第4张图片
注销

你可能感兴趣的:(统计在线用户数案例)