山东大学 暑期实训 云主机服务比价与预测系统(五)-- 通过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的失效时间,单位为分钟。