session存在服务端,session监听器能够用来跟踪session的生命周期。spring-boot项目愈来愈流行,我就记录下spring boot项目中使用session监听器的过程,以便之后参考。java
spring boot使用监听器很是方便,使用这2个注解就可自动加载注册了:@WebListener和@ServletComponentScan web
为了加深理解,使用在线百度翻译了下:当使用嵌入式容器时,能够经过使用@ServletComponentScan启用@WebServlet、@WebFilter和@WebListener注释的类的自动注册。spring
关键在于:在启动类上使用@ServletComponentScan,就能够自动扫描使用@WebServlet、@WebFilter和@WebListener注解的类完成自动注册。数据库
1.编写session监听器类实现HttpSessionListener接口,并加上@WebListener注解,声明此类是一个监听器。session
package com.listener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /** * session监听器 * @author Administrator */ @WebListener public class SessionListener implements HttpSessionListener{ private int onlineCount = 0;//记录session的数量
/** * session建立后执行 */ @Override public void sessionCreated(HttpSessionEvent se) { onlineCount++; System.out.println("【HttpSessionListener监听器】 sessionCreated, onlineCount:" + onlineCount); se.getSession().getServletContext().setAttribute("onlineCount", onlineCount); } /** * session失效后执行 */ @Override public void sessionDestroyed(HttpSessionEvent se) { if (onlineCount > 0) { onlineCount--; } System.out.println("【HttpSessionListener监听器】 sessionDestroyed, onlineCount:" + onlineCount); se.getSession().getServletContext().setAttribute("onlineCount", onlineCount); } }
2.启动类上使用@ServletComponentScan,自动扫描带有(@WebServlet, @WebFilter, and @WebListener)注解的类,完成注册。ide
package com; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})//无数据库运行
@ServletComponentScan //scans from the package of the annotated class (@WebServlet, @WebFilter, and @WebListener)
public class WebApp{ public static void main(String[] args) { System.out.println(" springApplication run !"); SpringApplication.run(WebApp.class,args); } }
只用简单的2个注解就完成了session监听器的注册。这样就能监听到容器session的生命周期了。spring-boot
注意:HttpServletRequest的getSession()方法,若是当前请求没有对应的session会自动建立session。spa
使用getSession(false)就不会建立session,若是没有当前请求对应的session就返回null.翻译