1. 程式人生 > >[轉]HttpSessionBindingListener和HttpSessionAttributeListener區別

[轉]HttpSessionBindingListener和HttpSessionAttributeListener區別

list size 的區別 ESS ssi val block remove 超時

HttpSessionBindingListener和HttpSessionAttributeListener是兩個經常讓初學者弄混的監聽器,其實它們有很大的區別。這2個監聽器在文章中簡稱為BindingListener和AttributeListener.

1.BindingListener有2個方法,valueBound(HttpSessinBindingEvent)和valueUnbount(HttpSessionBindingEvent)。實現BindingListener接口的對象被綁 定到session時觸發valueBound事件,解除綁定時觸發valueUnbound事件。舉例來說:

[c-sharp] view plain copy
  1. public class UserObject implements HttpSessionBindingListener{
  2. public void valueBound(HttpSessionBindingEvent event){
  3. System.out.println("觸發綁定事件!");
  4. }
  5. public void valueUnbound(HttpSessionBindingEvent event){
  6. System.out.println("解除和session的綁定");
  7. }

UserObject user = new UserObject();

當把該監聽器保存到session中,session.setAttribute("user",user)時就會觸發valueBound事件.

當該監聽器從session中移除時即session.removeAttribute("user"),觸發valueUnbound事件;session失效或超時

時也會觸發valueUnbound事件。

註意:只有當該監聽器(UserObject)保存到session中或從session移除時才會觸發事件,其他沒有實現該listener對象保存到session時不會觸發該事件。

2.AttributeListener接口有3個方法,attributeAdded(HttpSessionBindingEvent),attributeRemoved(HttpSessionBindingEvent),

attributeReplaced(HttpSeesionEvent)。當在session中添加、移除或更改屬性值時會觸發相應的事件。

例子:

[java] view plain copy
  1. MyListener implements HttpSessionAttributeListener{
  2. attributeAdded(HttpSessionBindingEvenet event){
  3. System.out.println("有對象加入session中");
  4. }
  5. attributeRemoved(HttpSessionBindingEvent event){
  6. System.out.println("有對象從session中移除");
  7. }
  8. attributeReplaced(HttpSessionBindingEvent event){
  9. System.out.println("屬性值改變");
  10. }
  11. }

OtherObject other = new OtherObject();

當有對象添加到session中時,session.setAttribute("object",other)觸發attributeAdded事件,

當該對象從session移除時,session.removeAttribute("object")觸發attriubteRemoved事件,

當該屬性的值發生變化時, session.replaceAttribute("object",another)觸發attributeRepalced事件。

註意:只要有對象保存到session中或從session中移除或改變屬性的值都會觸發相應事件,不論該對象是否實現了AttributeListener。

總結:

1.只有實現了HttpSessionBindingListener的類,在和session綁定、解除綁定時觸發其事件。

2.實現了HttpSessionAttributeListener後,任何對象(不論其是否實現了AttributeListener)在變化時均觸發對應的事件。

作者:Neil223

地址:https://www.cnblogs.com/Neil223/p/5221154.html

[轉]HttpSessionBindingListener和HttpSessionAttributeListener區別