An Example of HttpSessionAttributeListener in Java

UPDATED: 16 March 2015

HttpSessionAttributeListener, is used to keep track of every HttpSession attribute Added, Replaced or Removed in your current web application.

Source Code
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class SessionAttributeListener implements HttpSessionAttributeListener {
    /**
     * Called when any servlet/jsp in application add the Attribute in HttpSession 
     * @param event 
     */
    @Override
    public void attributeAdded(HttpSessionBindingEvent event) {
        /**
         * Get the attribute name.
         * Attribute name is always in String
         */
        String strAttributeName = event.getName();
        /**
         * Get the attribute value
         * Attribute value can be String, Object, etc...
         */
        Object objAttributeValue = event.getValue();
        /* Print the value of AttributeName and AttributeValue */
        System.out.println("Attribute added: [" + strAttributeName + " : " + objAttributeValue + "]");
    }

    /**
     * Called when any servlet/jsp in application override/replace/add_same_attribute_to the HttpSession
     * @param event 
     */
    @Override
    public void attributeRemoved(HttpSessionBindingEvent event) {
        /**
         * Get the attribute name.
         * Attribute name is always in String
         */
        String strAttributeName = event.getName();
        /**
         * Get the attribute value
         * Attribute value can be String, Object, etc...
         */
        Object objAttributeValue = event.getValue();
        /* Print the value of AttributeName and AttributeValue */
        System.out.println("Attribute removed: [" + strAttributeName + " : " + objAttributeValue + "]");
    }

    /**
     * Called when any servlet/jsp in application try to remove the attribute from HttpSession
     * @param event 
     */
    @Override
    public void attributeReplaced(HttpSessionBindingEvent event) {
        /**
         * Get the attribute name.
         * Attribute name is always in String
         */
        String strAttributeName = event.getName();
        /**
         * Get the attribute value
         * Attribute value can be String, Object, etc...
         */
        Object objAttributeValue = event.getValue();
        /* Print the value of AttributeName and AttributeValue */
        System.out.println("Attribute replaced: [" + strAttributeName + " : " + objAttributeValue + "]");

    }
}

Attach SessionAttributeListener in your web application through web.xml . Add following code in you web.xml between web-app tag.
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
...
...
    <servlet>
        <servlet-name>SessionAttributeServlet</servlet-name>
        <servlet-class>com.javaquery.servlet.SessionAttributeServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SessionAttributeServlet</servlet-name>
        <url-pattern>/SessionAttributeServlet</url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>com.javaquery.Listeners.SessionAttributeListener</listener-class>
    </listener>
</web-app>

Source Code (Sample Servlet)
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SessionAttributeServlet extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            HttpSession httpSession = request.getSession();
            /* SessionAttributeListener.attributeAdded(HttpSessionBindingEvent event) will be called */
            httpSession.setAttribute("username", "vicky.thakor"); 
            /* SessionAttributeListener.attributeRemoved(HttpSessionBindingEvent event) will be called */
            httpSession.setAttribute("username", "rajpriya.chudasama");
            /* SessionAttributeListener.attributeReplaced(HttpSessionBindingEvent event) will be called */
            httpSession.removeAttribute("username");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }
}

0 comments :