session监听器可以用来统计用户在线时长,统计网站的访问人数,以及在线用户。除了session监听器,还有websocket也可以实现这些功能。
我在项目中使用session监听器是用于统计用户在线时长。
1、首先创建MySessionListener并让它实现HttpSessionListener, ServletContextListener接口
实现ServletContextListener接口,是因为监听器中无法自动注入service,ServletContextListener的contextInitialized(ServletContextEvent sce)方法,可以帮助我们注入spring容器一个bean。
package com.test.platform.web.util.authorization; import com.test.platform.core.system.service.CustomerUserLoginLogService; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; /** * Session监听器 * Created by Administrator on 2018/9/28. */ public class MySessionListener implements HttpSessionListener, ServletContextListener { private CustomerUserLoginLogService customerUserLoginLogService; @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { //此方法在Session创建时执行 } @Override public void sessionDestroyed(HttpSessionEvent event) { //此方法在Session销毁时执行 } @Override public void contextInitialized(ServletContextEvent sce) { //此方法可注入service层和dao层 ApplicationContext ac = WebApplicationContextUtils .getWebApplicationContext(sce.getServletContext()); customerUserLoginLogService = (CustomerUserLoginLogService) ac .getBean("customerUserLoginLogService"); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { } } |
在sessionCreated和sessionDestoryed方法中可以实现我们要处理的逻辑
2、在web.xml中添加自定义监听器的配置
<!--配置自定义的Session监听器--> <listener> <listener-class>com.test.platform.web.util.authorization.MySessionListener</listener-class> </listener> |
3、在applicationContext.xml文件中将CustomerUserLoginLogServiceImpl交给spring容器管理
<bean id="customerUserLoginLogService" class="com.test.platform.core.system.implemented.CustomerUserLoginLogServiceImpl"></bean> |
如有错误,欢迎指正