原理:
当一个浏览器第一次访问网站的时候,J2EE应用服务器会新建一个HttpSession对象 ,并触发 HttpSession创建事件 ,如果注册了HttpSessionListener事件监听器,则会调用HttpSessionListener事件监听器的sessionCreated方法。相反,当这个浏览器访问结束超时的时候,J2EE应用服务器会销毁相应的HttpSession对象,触发 HttpSession销毁事件,同时调用所注册HttpSessionListener事件监听器的sessionDestroyed方法。
所以只要新建一个类实现HttpSessionListener这个接口,就可以对sessionCreated和sessionDestroyed方法做自定义处理啦。
配置监听
在web.xml的开头处配置自定义监听器(监听器大于过滤器大于servlet 顺序从上往下最好)
<!-- 网站在线人数统计监听器 -->
<listener>
<listener-class>com.zhaohy.app.utils.OnLineCountListener</listener-class>
</listener>
新建自定义监听类
package com.zhaohy.app.utils;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnLineCountListener implements HttpSessionListener {
public int count=0;//记录session的数量
@Override
public void sessionCreated(HttpSessionEvent se) {//监听session的创建
count++;
se.getSession().getServletContext().setAttribute("Count", count);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {//监听session的撤销
count--;
se.getSession().getServletContext().setAttribute("Count", count);
}
}
如此,当HttpSession创建的时候会count++ ;销毁的时候count--;在application域可以拿到自定义的Count属性。
页面jsp可以直接用el表达式输出${Count}
补充JSP四大域对象
pageContext域:${pageScope.key};
request域:${requestScope.key};
session域:${sessionScope.key};
application域:${applicationScope.key};
网友评论