This is version 5. It is not the current version, and thus it cannot be edited.
[Back to current version]   [Restore this version]

Session Attribute Listener

A session attribute listener receives notifications when a session is changed.

This is useful for general debugging, and especially useful when writing a distributable web application, to ensure that session replication to other members of the cluster is working as expected.

If you want to be notified when sessions are created or invalidated, see Session Listener. Both of these interfaces can be implemented in the same class, to create a single listener which is notified about create, destroy and change events.

This page focuses only on the Session Attribute Listener interface.

Creating a SessionAttributeListener

To create a Session Attribute Listener, create a class which implements the HttpSessionAttributeListener interface.

This involves implementation of the following three methods:

public void attributeAdded(HttpSessionBindingEvent sessionBindingEvent);
public void attributeRemoved(HttpSessionBindingEvent sessionBindingEvent);
public void attributeReplaced(HttpSessionBindingEvent sessionBindingEvent);

Each listener class must also have a public constructor taking no arguments.

attributeAdded()

This method is called whenever a new session attribute is added with HttpSession.setAttribute().

When attributes are replaced, attributeReplaced() is called instead (see below).

attributeRemoved()

This method is called whenever a session attribute is removed with HttpSession.removeAttribute().

attributeReplaced()

This method is called whenever an existing session attribute is replaced with a new value, using HttpSession.setAttribute().

HttpSession

The session is passed to both of the above methods in the HttpSessionBindingEvent object.

It can be retrieved as follows:

HttpSession session = sessionBindingEvent.getSession();

Accessing the changed attribute

The name and value of the changed attribute are passed in the HttpSessionBindingEvent object.

They can be retrieved with getName() and getValue() as follows:

String attributeName = sessionBindingEvent.getName();
String attributeValue = sessionBindingEvent.getValue();

Full Example

import javax.servlet.*;

public final class MySessionAttributeListener
implements HttpSessionAttributeListener {

  public MySessionAttributeListener() {
  }

  public void attributeAdded(HttpSessionBindingEvent sessionBindingEvent) {

    // Get the session
    HttpSession session = sessionEvent.getSession();

    // Log some information
    System.out.println("[SessionInfo] "+new java.util.Date()+" Attribute added, session "+session+": "+sessionBindingEvent.getName()+"="+sessionBindingEvent.getValue());
  }
  
  public void attributeRemoved(HttpSessionBindingEvent sessionBindingEvent) {

    // Get the session
    HttpSession session = sessionEvent.getSession();

    // Log some information
    System.out.println("[SessionInfo] "+new java.util.Date()+" Attribute removed, session "+session+": "+sessionBindingEvent.getName());
  }
  
  public void attributeReplaced(HttpSessionBindingEvent sessionBindingEvent) {

    // Get the session
    HttpSession session = sessionEvent.getSession();

    // Log some information
    System.out.println("[SessionInfo] "+new java.util.Date()+" Attribute replaced, session "+session+": "+sessionBindingEvent.getName()+"="+sessionBindingEvent.getValue());
  }
}

Adding the Session Attribute Listener to web.xml

Add the above class to WEB-INF/classes, and add the following in web.xml to activate our new SessionAttributeListener.

<listener>
    <listener-class>MySessionAttributeListener</listener-class>
</listener>

Note that the above class was not put in a package, so no package name is specified in the <listener-class> tag.

Other Listener Examples

navigation
metawerx specific
search
Share
tools
help

referring pages

Share