15 - Servlet Listeners: Page 3 of 4

15.2.3 HttpSessionListener

HttpSessionListener listens to HttpSessionEvent event which gives a notification when session is created or destroyed. HttpSessionListener  is the interface and it defines two methods –

  • void sessionDestroyed(HttpSessionEvent e) – This method is executed when session is destroyed
  • void sessionCreated(HttpSessionEvent e)- This method is executed when session  is created.

Session object can be obtained from  HttpSessionEvent.

Let s write a sample listener which will print some message describing the event.

  1. Add listener  entry in web.xml
<listener>
 <description>Session Listener Example</description>
 <listener-class>com.servlet.tutorial.MySessionListener</listener-class>
</listener>

  1. Write MySessionListener code
package com.servlet.tutorial;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MySessionListener  implements HttpSessionListener {
/**
 * Default constructor. 
     */
public MySessionListener() {
}
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
    HttpSession session = httpSessionEvent.getSession();
    System.out.println("Session Created at  " + session.getCreationTime() + " with id  " + session.getId() );
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
    HttpSession session = httpSessionEvent.getSession();
    System.out.println("Session destroyed  with id ::  " + session.getId() );
}   
}

  1. Add HttpSessionListenerDemo servlet entry in web.xml
<servlet>
    <servlet-name>HttpSessionListenerDemo</servlet-name>
    <servlet-class>com.servlet.tutorial.HttpSessionListenerDemo</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HttpSessionListenerDemo</servlet-name>
    <url-pattern>/HttpSessionListenerDemo</url-pattern>
 </servlet-mapping>

  1. Write HttpSessionListenerDemo Servlet Code
package com.servlet.tutorial;
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 HttpSessionListenerDemo extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
        HttpSession session = request.getSession();
        session.invalidate();
    }
}

Testing

Hit http://localhost:8080/HelloWorld/HttpSessionListenerDemo

15.2.4 HttpSessionAttributeListener

HttpSessionAttributeListener listens to HttpSessionBindingEvent  event which gives a notification when any  object is added, removed or replaced from session .

HttpSessionAttributeListener is the interface and it defines three methods –

  • attributeAdded(HttpSessionBindingEvent  e): It notifies whenever a new  attribute is added to the session.
  • attributeRemoved(HttpSessionBindingEvent  e): It notifies whenever the attribute is removed from the session.
  • attributeReplaced(HttpSessionBindingEvent  e): It notifies whenever the attribute gets replaced on the session.

Attribute name and value  that has been added, removed or replaced  can be obtained from the getName() and getValue() method of HttpSessionBindingEvent 
Let s write a sample listener which will print some message describing the event and attribute values

  1. Add listener entry in web.xml
<listener>
 <description>Session Attribute Listener Example</description>
 <listener-class>com.servlet.tutorial.MyHttpSessionAttributeListener</listener-class>
</listener>

  1. Write MyHttpSessionAttributeListener Code
package com.servlet.tutorial;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class MyHttpSessionAttributeListener  implements HttpSessionAttributeListener {
/**
 * Default constructor. 
 */
public MyHttpSessionAttributeListener() 
{
}
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
    System.out.println("Attribute has been added");
    String attributeName = httpSessionBindingEvent.getName();
    Object attributeValue = httpSessionBindingEvent.getValue();
    System.out.println("Attribute Name ::" + attributeName);
    System.out.println("Attribute Value ::" + attributeValue.toString());
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("Attribute has been removed");
        String attributeName = httpSessionBindingEvent.getName();
        Object attributeValue = httpSessionBindingEvent.getValue();
        System.out.println("Attribute Name ::" + attributeName);
            System.out.println("Attribute Value ::" + attributeValue.toString());
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("Attribute has been replaced");
        String attributeName = httpSessionBindingEvent.getName();
        Object attributeValue = httpSessionBindingEvent.getValue();
        System.out.println("Attribute Name ::" + attributeName);
    System.out.println("Attribute Value ::" + attributeValue.toString());
    }
}

  1. Add HttpSessionAttributeListenerDemo servlet entry in web.xml
<servlet>
    <servlet-name>HttpSessionAttributeListenerDemo</servlet-name>
    <servlet-class>com.servlet.tutorial.HttpSessionAttributeListenerDemo</servlet-class>
 </servlet>
  <servlet-mapping>
    <servlet-name>HttpSessionAttributeListenerDemo</servlet-name>
    <url-pattern>/HttpSessionAttributeListenerDemo</url-pattern>
 </servlet-mapping>

 

  1. Write HttpSessionAttributeListenerDemo servlet code
package com.servlet.tutorial;
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 HttpSessionAttributeListenerDemo extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        HttpSession session = request.getSession();
        String attributeName="SessionAttribute";
        String attributeValue="Initial Value";
        session.setAttribute(attributeName, attributeValue);
        attributeValue="New Value";
        session.setAttribute(attributeName, attributeValue);
        session.removeAttribute(attributeName);
    }
}

Testing

Hit http://localhost:8080/HelloWorld/HttpSessionAttributeListenerDemo

Note- getValue() returns the  previous value in case of replace because listener is executed before it is actually replaced.

Like us on Facebook