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.
- Add listener entry in web.xml
<listener> <description>Session Listener Example</description> <listener-class>com.servlet.tutorial.MySessionListener</listener-class> </listener>
- 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() ); } }
- 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>
- 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
- Add listener entry in web.xml
<listener> <description>Session Attribute Listener Example</description> <listener-class>com.servlet.tutorial.MyHttpSessionAttributeListener</listener-class> </listener>
- 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()); } }
- 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>
- 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.