HttpSessionListener统计当前在线人数
写法:
@WebListener
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
}
}
实例————统计在线人数————
1.contextListener(在contextListener 中添加人数统计配置信息【“onlineNum”,0】)
@WebListener
public class contextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println(" contextListener contextInitialized");
ServletContext servletContext= servletContextEvent.getServletContext();
String url=servletContext.getInitParameter("url");
String topic=servletContext.getInitParameter("topic");
Config config=new Config();
config.setTopic(topic);
config.setUrl(url);
servletContext.setAttribute("config",config);
//添加在线人数配置信息
servletContext.setAttribute("onlineNum",0);
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println(" contextListener contextDestroyed");
}
}
2.SessionListener
@WebListener
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("SessionListener sessionCreated");
ServletContext servletContext=httpSessionEvent.getSession().getServletContext();
//获取在线人数
Integer onlineNum= (Integer) servletContext.getAttribute("onlineNum");
//新增
servletContext.setAttribute("onlineNum",++onlineNum);
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("SessionListener sessionDestroyed");
//获取在线人数
ServletContext servletContext=httpSessionEvent.getSession().getServletContext();
Integer onlineNum=(Integer) servletContext.getAttribute("onlineNum");
//减少在线人数
servletContext.setAttribute("onlineNum",--onlineNum);
}
}
3.add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<titl统计e>ys在线人数</titl统计e>
</head>
<body>
近三十分总在线人数:${applicationScope.onlineNum}
</body>
</html>
4.delete.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>ys在线人数</title>
</head>
<body>
销毁session
<% request.getSession().invalidate();%>
</body>
</html>
截图:
未访问页面
访问页面后
再用其他浏览器或隐身模式新开一个网页访问
——————————————————————————————————————————
访问delete界面
刷新第一个浏览器
注意:
关闭启动tomcat自动打开浏览器,因为会触发会触发多个session
使用多个浏览器测试 粗略统计,如果是多机器分布式情况,需要用到分布式缓存