Listeners for HttpSession

最近在項目中剛好須要在 session time out 的時候, 取出某些attribute的value, 作一些善後工做, 要用到 HttpSession Listener, 在網上查到些許資料, 爲了方便故,整理一下,寫在這裏,算是爲本身作個彙總, 多有引用,參考帖子的地址附在最後,方便查閱html

HttpSession 的 Listener 大體有一下幾種:java

  1.  HttpSessionListener  Implementations of this interface are notified of changes to the list of active sessions in a web application. To receive notification events, the implementation class must be configured in the deployment descriptor for the web application. 這個 interface 包括兩個方法, sessionCreated(HttpSessionEvent se), sessionDestroyed(HttpSessionEvent se), 從這兩個方法的名字就能夠看出, 這個 listener 監聽的是 session 的建立和銷燬, 由於並不肯定在調用sessionDestroyed 方法時, session 裏的 attribute 是否被 remove, (手頭不便, 待驗證), 因此並不肯定該 listener 是否會知足個人需求, hold.
  2.  HttpSessionAttributeListener This listener interface can be implemented in order to get notifications of changes to the attribute lists of sessions within this web application. 這個 listener 裏共有三個方法 attributeAdded(HttpSessionBindingEvent se), attributeRemoved(HttpSessionBindingEvent se)  和  attributeReplaced(HttpSessionBindingEvent se) . 一樣,顧名思義,這個 listener 監聽的是 session 中 attribute 的變化 ( 在timeout 時會調用 ), 這個 listener 符合個人需求,可是會在每次 attribute 改變的時候調用, 因此不肯定在效能上產生多大的影響, hold.
  3. HttpSessionBindingListener  Causes an object to be notified when it is bound to or unbound from a session. The object is notified by an HttpSessionBindingEvent object. This may be as a result of a servlet programmer explicitly unbinding an attribute from a session, due to a session being invalidated, or due to a session timing out.  這個 listener 包括兩個方法 valueBound(HttpSessionBindingEvent event) 和 valueUnbound(HttpSessionBindingEvent event) . 這個 listener 的使用大體是, 假若咱們已經建立了一個實現了該接口的類的實例,當這個實例被 bound 到session 或者被 unbound 的時候, valueBound 和 valueUnbound 就會被調用,  看起來不錯,比較接近個人需求, 由於我所須要使用的 attribute 僅僅會在session 開始和結束時, 纔會發生bind 和 unbind 操做, 暫 hold.
  4. HttpSessionActivationListener  Objects that are bound to a session may listen to container events notifying them that sessions will be passivated and that session will be activated. A container that migrates session between VMs or persists sessions is required to notify all attributes bound to sessions implementing HttpSessionActivationListener. 這個 listener 包括兩個方法 sessionDidActivate(HttpSessionEvent se) 和 sessionWillPassivate(HttpSessionEvent se), 當對象被bound的某個 session 已經被 activated 或者即將被 passivated 時被調用.  說實話雖然字面看懂了,但真心不知道何時用,唉,求指教啊!

從上面的說明,咱們也能夠了解到這些listener的使用方法,前兩種 listener 定義好實現接口的類後,須要配置web.xmlweb

< listener > < listener-class >com.abc.MyListener </ listener-class > </ listener > .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

後面兩種實現了接口,將實現接口的類的object 直接設入 session 的 attribute 裏便可.  spring

具體一些listener的例子,能夠直接參看下面的連接, mkyong 的示例api

真正須要實現的時候,由於咱們採用的是springframework,因此還須要參考 mkyong 的另一篇範例 「在session listener中如何作依賴注入"session

 

感謝全部發問解答提供了方便的前輩,多謝,哈哈!oracle

參考資料以下:app

相關文章
相關標籤/搜索