在java web应用中,当你想在建立会话或移除会话时,让系统做某些事情,比如说,统计在线用户,每当有用户登录时,或退出时,那么可以用下面这个监听器来监听。
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class OnlineCountListener implements HttpSessionAttributeListener ,HttpSessionListener,ServletContextListener{
/**
* 定义监听的session属性名.
*/
public final static String LISTENER_NAME = "user_name";
/**
* 定义存储客户登录session的集合.
*/
private static List sessions = new ArrayList();
private static int userSum=0;
/**
* session加入某值时此方法会被调用.
*
* @param HttpSessionBindingEvent
* session事件
*/
public void attributeAdded(HttpSessionBindingEvent sbe) {
if (LISTENER_NAME.equals(sbe.getName())) {
sessions.add(sbe.getValue());
}
}
/**
* session失效时的监听方法.
*
* @param HttpSessionBindingEvent
* session事件
*/
public void attributeRemoved(HttpSessionBindingEvent sbe) {
if (LISTENER_NAME.equals(sbe.getName())) {
sessions.remove(sbe.getValue());
}
}
/**
* session覆盖时的监听方法.
*
* @param HttpSessionBindingEvent
* session事件
*/
public void attributeReplaced(HttpSessionBindingEvent sbe) {
if (LISTENER_NAME.equals(sbe.getName())) {
sessions.remove(sbe.getValue());
sessions.add(sbe.getValue());
}
}
public void sessionCreated(HttpSessionEvent arg) {
userSum++;
}
public void sessionDestroyed(HttpSessionEvent arg) {
userSum--;
}
/**
* 返回客户登录session的集合.
*
* @return
*/
public static List getSessions() {
return sessions;
}
public static int getMemberSum() {
return sessions.size();
}
public static int getSum() {
return userSum;
}
public static Boolean isExistInSessions(String username) {
String user_name;
for (Integer i = 0; i < sessions.size(); i++) {
user_name = (String) sessions.get(i);
if (user_name.equals(username)) {
return true;
} else {
continue;
}
}
return false;
}
//此方法在初始化监听器的时候会调用,用于spring注入
public void contextInitialized(ServletContextEvent sce) {
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
this.xxxService=(XxxService)applicationContext.getBean("xxxService");
}
public void contextDestroyed(ServletContextEvent sce) {
}
private XxxService xxxService;//这里是你希望注入的服务类
public XxxService getXxxService(){
return this.xxxService;
}
public void setxxxService(XxxService xxxService){
this.xxxService=xxxService;
}
}
在web.xml中加入以下配置代码,注意必须在spring容器配置之后。
<listener>
<listener-class>
com.xxx.xxx.xxx.OnlineCountListener
</listener-class>
</listener>
然后在spring配置
<bean id="xxxService">xxx.xxx.xxx.xxxService</bean>
如果您觉得我的文章给了您帮助,请为我买一杯饮料吧!以下是我的支付宝,意思一下我将非常感激!