2021-07-08

山东大学 暑期实训 云主机服务比价与预测系统(五)-- 通过Spring boot实现网站登陆人数的实时监控

对于一个优秀网站来说,统计网站实时在线的人数是预测网站的流量以及发展情况是必不可少的,今天我们来介绍一下一种基本的通过Spring boot架构中的监听器实现的网站人数统计。
由于技术原因此次我们是通过sessionlistener的监听器,通过检测session的数量来统计用户数量,因此只能统计出登陆客户的数目。

1.设立sessionlistener监听器

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class UserStatisticsListener implements HttpSessionListener {
    public static int count = 0;    

    @Override    

    public void sessionCreated(HttpSessionEvent se) {        

    System.out.println("创建session ,count++");   
    

    count ++;  
    System.out.println(count);
    se.getSession().getServletContext().setAttribute("count", count);
    }    

    @Override    

    public void sessionDestroyed(HttpSessionEvent se) {        

    System.out.println("销毁session");    
    

    count --;    
    System.out.println(count);
    se.getSession().getServletContext().setAttribute("count", count);

    }
}

先初始化静态变量count=0,作为统计网站session的数目
分为两个方法,sessionCreated()方法在session被创建时,count+1;
sessionDestroyed()方法在session被销毁时,count-1;

2.设置与sessionlistener监听器对应的controller类

import java.net.URLEncoder;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.example.simple.component.UserStatisticsListener;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@Controller
public class UserListenerController {
	@RequestMapping("/count")
    @ResponseBody
    public String number(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){
        try{  //把sessionId记录在浏览器
            Cookie c = new Cookie("JSESSIONID", URLEncoder.encode(httpServletRequest.getSession().getId(), "utf-8"));
            c.setPath("/");
            c.setMaxAge( 48*60 * 60);
            httpServletResponse.addCookie(c);
        }catch (Exception e){
            e.printStackTrace();
        }
 
        HttpSession session = httpServletRequest.getSession();
        Object count=session.getServletContext().getAttribute("count");
        return "count : "+count;
    }

}

设置访问路径统计count的数量并在路径为/count的网页下返回count数量,即在线的登陆的用户数量

3.设置session的失效时间
由于sesssion的不确定性导致有时即使浏览器被关闭了,但session也要很长一段时间才能销毁,因此我们为session设定失效时间
在web.xml中

<session-config>
<session-timeout>2</session-timeout>
</session-config>

代码中的数字中指的是session的失效时间,单位为分钟。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值