HttpSessionBindingListener is implemented by session attributes. HttpSessionAttributeListener instance is created by Web-Container, based on <listern> element in web.xml. For each <listern-class>, one listern instance is created. Now you can see, if your session has 3 attributes, each of them implements HttpSessionBindingListener, you got 3 ***Binding listeners. But if you only define one <listener-class> in web.xml, you only get one ***Attribute listener.
another important difference, HttpSessionAttributeListener monitors ALL Sessions in the web-app, whenver any session has an attribute added/removed/replace, the listener got notified. HttpSessionBingListener only cares about itself. If itself is added into or removed from a session, it is notified.
I have a question regarding HttpSessionBindingListener and HttpSessionAttributeListener. Say the definition of classes MyBindingListener , TestServlet and snippet of web.xml are as follows:
where class MySessionAttributeListener implements HttpSessionAttributeListener interface. My qustion is: When we access the TestServlet from a browser, which listener classes will be notified by session.setAttribute("countObject", countObject) statement? (A) MySessionAttributeListener (B) MyBindingListener (C) Both listeners(MySessionAttributeListener and MyBindingListener) Thanks in advance Thambi
Kylie why is it both and not just the class specified in web.xml? cheers Dan
posted 17 years ago
oops kyle, sorry about misspelling your name why is it both and not just the class specified in web.xml? cheers
posted 17 years ago
that is by definition of these 2 listeners. there is no reason why only one of them get notified, and the other get blocked. your web-container will follow what the spec says. if the attribute that is added to a session implements HttpSessionBindingListener, it will get notified. In the mean time, if there is a HttpSessionAttributeListener defined in web.xml, that listener instance will also get notified. please refer to my earlier reply to the original post.