1. 程式人生 > >HttpSessionListener 監聽器事件配置及注入bean ssm框架

HttpSessionListener 監聽器事件配置及注入bean ssm框架

當一個瀏覽器第一次訪問網站的時候,J2EE應用伺服器會新建一個HttpSession物件 ,並觸發 HttpSession建立事件 ,如果註冊了HttpSessionListener事件監聽器,則會呼叫HttpSessionListener事件監聽器的sessionCreated方法。相反,當這個瀏覽器訪問結束超時的時候,J2EE應用伺服器會銷燬相應的HttpSession物件,觸發 HttpSession銷燬事件,同時呼叫所註冊HttpSessionListener事件監聽器的sessionDestroyed方法

1.建立SessionCounter 這個類,並注入一個bean:

@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);  
    }    
}  
2.web.xml檔案中做相關的配置。
<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例項。