与拦截器差不多~配置→写类√两步解决~_(:зゝ∠)_,~这是一个统计在线人数的小测试~
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)方法,用不同浏览器测试√: