与拦截器差不多~配置→写类√两步解决~_(:зゝ∠)_,~这是一个统计在线人数的小测试~
web.xml中配置listener标签,用自定义的监听类替换掉原先的~session-config标签中设置session的超时时间
web.xml:
<listener> <!-- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> --> <listener-class>com.web.listener.CountLineListener</listener-class> </listener> <!-- 设置session超时时间 --> <session-config> <session-timeout>60</session-timeout> </session-config>
CountLineListener.java:
package com.web.listener;
import java.text.SimpleDateFormat;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.springframework.web.context.ContextLoaderListener;
/**
* 监听器
* @author Administrator
*
*/
public class CountLineListener extends ContextLoaderListener implements HttpSessionListener{
public CountLineListener() {
super();
}
public void sessionCreated(HttpSessionEvent se) {
System.out.println("创建session......");
ServletContext context = se.getSession().getServletContext();
Integer count = (Integer)context.getAttribute("count");
if(count == null){
count = new Integer(1);
}else{
int co = count.intValue( );
count= new Integer(co+1);
}
System.out.println(new SimpleDateFormat("HH:mm:ss").format(System.currentTimeMillis())+" 当前用户人数:"+count);
context.setAttribute("count", count);//保存人数
}
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("销毁session......");
ServletContext context = se.getSession().getServletContext();
Integer count = (Integer)context.getAttribute("count");
int co = 0;
if(count != null)count.intValue();
count = new Integer(co - 1);
context.setAttribute("count", count);
System.out.println(new SimpleDateFormat("HH:mm:ss").format(System.currentTimeMillis())+" 当前用户人数:"+count);
}
}
session创建时会调用sessionCreated(HttpSessionEvent se)方法,销毁时调用sessionDestroyed(HttpSessionEvent se)方法,用不同浏览器测试√: