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
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.