Session監聽類HttpSessionListener介紹及在listener里取得request


Session監聽類HttpSessionListener介紹及在listener里取得request

 

servlet-api.jar中提供了監聽類HttpSessionListener,主要方法有兩個,sessionCreated、sessionDestroyed,根據方法名就能明白是監聽session的創建和銷毀.

 

首先不可避免的要在sessionCreated方法中想要取得request對象(進而取得用戶ip,瀏覽器等屬性),但是HttpSessionEvent顯然直接取不到request對象。 

研究了下,發現spring(主要是context jar包)提供了監聽類:RequestContextListener,可直接配在web.xml中,通過這個監聽器,可以直接拿到request上下文。示例如下: 

Java代碼   收藏代碼

    HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  

    System.out.println(request.getHeader("user-agent"));  



-------------------------------- 
另外,在sessionCreated雖然能取得request對象,但千萬不能寫request.getSession(true)類似的方法,這樣會引起死循環,理由是sessionCreated監聽session被創建時,此時的session還沒有完全被建立,因為用request.getSession(true)並不能拿到我們想要的那個session實例(大家都知道request.getSession(true) 表示獲取session對象,若session不存在則會再創建)。 

 

於是就會悲劇的陷入:監聽方法中用request取得session,沒拿到,創建session,監聽方法又生效,生效后繼續取得session,沒拿到,創建session... 這樣的循環中。 

綜上,session實例應從HttpSessionEvent拿。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM