HttpSessionListener 監聽器事件配置及注入bean ssm框架
阿新 • • 發佈:2018-12-31
當一個瀏覽器第一次訪問網站的時候,J2EE應用伺服器會新建一個HttpSession物件 ,並觸發 HttpSession建立事件 ,如果註冊了HttpSessionListener事件監聽器,則會呼叫HttpSessionListener事件監聽器的sessionCreated方法。相反,當這個瀏覽器訪問結束超時的時候,J2EE應用伺服器會銷燬相應的HttpSession物件,觸發 HttpSession銷燬事件,同時呼叫所註冊HttpSessionListener事件監聽器的sessionDestroyed方法。
1.建立SessionCounter 這個類,並注入一個bean:
2.web.xml檔案中做相關的配置。@Service public class SessionCounter implements HttpSessionListener { /*@Autowired 無法注入通過WebApplicationContextUtils 得到Spring容器的例項。根據bean的名稱返回bean的例項。 private UserService userService;*/ private static int activeSessions =0; /* Session建立事件 */ public void sessionCreated(HttpSessionEvent se) { ServletContext ctx = se.getSession( ).getServletContext( ); System.out.println("session建立"); } /* Session失效事件 */ public void sessionDestroyed(HttpSessionEvent se) { ServletContext ctx=se.getSession().getServletContext(); HttpSession sess = se.getSession(); Users u=new Users(); u.setId((Integer) sess.getAttribute("id")); System.out.println((Integer) sess.getAttribute("id")+"aaaaaaaaa"+sess.getAttribute("username")); u.setLoginState(2); //通過抽象的私有方法得到Spring容器中Bean的例項。 UserService userService=(UserService)this.getObjectFromApplication(sess.getServletContext(),"userServiceImpl"); userService.updateUsers(u); System.out.println(u.getLoginState().toString()); } /** * 通過WebApplicationContextUtils 得到Spring容器的例項。根據bean的名稱返回bean的例項。 * @param servletContext :ServletContext上下文。 * @param beanName :要取得的Spring容器中Bean的名稱。 * @return 返回Bean的例項。 */ private Object getObjectFromApplication(ServletContext servletContext,String beanName){ //通過WebApplicationContextUtils 得到Spring容器的例項。 ApplicationContext application=WebApplicationContextUtils.getWebApplicationContext(servletContext); //返回Bean的例項。 return application.getBean(beanName); } }
<listener>
<listener-class>com.wangyun.service.impl.SessionCounter</listener-class>
</listener>
session過期時間單位:分鐘
<session-config>
<session-timeout>1</session-timeout>
</session-config>
HttpSessionListener主要注意的是bean的注入,只能從spring容器中得到bean例項。