Showing posts with label HttpSessionBindingListener. Show all posts
Showing posts with label HttpSessionBindingListener. Show all posts

Saturday, 21 June 2014

Servlets : HttpSessionBindinglistener Demo

Master Core Java & Servlets!

Subscribe to Ram N Java for beginner-friendly coding walkthroughs, session management tutorials, and hands-on Java guides!

🔔 Subscribe to Ram N Java

What is HttpSessionBindingListener?

In Java web applications, the HttpSessionBindingListener interface (from the javax.servlet.http package) enables an object to be notified whenever it is bound to or unbound from an HttpSession.

Unlike other listeners, HttpSessionBindingListener is implemented directly on the JavaBean / model class itself rather than configured separately as a standalone listener in web.xml or with @WebListener. This allows the object itself to manage its own lifecycle when placed into or removed from user session scope.

Core Lifecycle Methods

The HttpSessionBindingListener interface provides two callback methods:

  • valueBound(HttpSessionBindingEvent event): Triggered automatically when the object is added to a session via session.setAttribute("key", object).
  • valueUnbound(HttpSessionBindingEvent event): Triggered automatically when the object is removed from a session via session.removeAttribute("key"), replaced by another object, or when the session is invalidated or expires.
public class User implements HttpSessionBindingListener {
    private String username;

    public User(String username) {
        this.username = username;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println(username + " is logged in (bound to session).");
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println(username + " is logged out (unbound from session).");
    }
}

Key Advantages & Differences

  • No Deployment Descriptor Registration: You do not need to register the class in web.xml or use @WebListener; it activates automatically upon being bound to a session.
  • Self-Contained Cleanup: The object can safely release its own resources, close open handles, or update database statuses when a user logs out or times out.
  • Granular Tracking: Unlike HttpSessionAttributeListener which listens to all session attributes globally, this listener only tracks the specific object implementing it.

Recommended Related Tutorials

Continue exploring servlet listeners and session handling with these tutorials from Ram N Java:


Click here to watch in Youtube : https://www.youtube.com/watch?v=DquotVucWWQ

Click the below Image to Enlarge

HttpSessionBindingListenerDemo Project Dir Structure

HttpSessionAttributeTestServlet.java
import java.io.IOException;
import java.io.PrintWriter;

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 HttpSessionAttributeTestServlet extends HttpServlet
{
    private static final long serialVersionUID = 1L;

    public void init() throws ServletException
    {
        System.out.println("-----------------------------------------");
        System.out.println(" Init method is called in "
                + this.getClass().getName());
        System.out.println("--------------------------------------");
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        HttpSession httpSession = request.getSession();

        sleep();

        User user = new User("Ram", 43);
        httpSession.setAttribute("userinfo", user);

        sleep();

        httpSession.invalidate();

        out.println("This is the example of HttpSessionBindingListener");

    }

    private void sleep()
    {
        try
        {
            Thread.sleep(10000);
        }
        catch (InterruptedException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void destroy()
    {
        System.out.println("-----------------------------------------");
        System.out.println(" destroy method is called in "
                + this.getClass().getName());
        System.out.println("-----------------------------------------");
    }

}

User.java
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class User implements HttpSessionBindingListener
{

    private String name;
    private int age;

    public User(String name, int age)
    {
        super();
        this.name = name;
        this.age = age;
    }

    public User(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public int getAge()
    {
        return age;
    }

    public void setAge(int age)
    {
        this.age = age;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent)
    {
        System.out.println("\n###################################\n");

        System.out.println("valueBound method has been called in "
                + this.getClass().getName());

        System.out.println("Added/Replaced Attribute Name ="
                + httpSessionBindingEvent.getName() + ",value = "
                + httpSessionBindingEvent.getValue());

        System.out.println("\n#####################################\n");

        /*
         * if particular Attribute is added/replaced, based on that if you want
         * to perform any operation then you can do it here.
         */

    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent)
    {
        System.out.println("\n###################################\n");

        System.out.println("valueUnbound method has been called in "
                + this.getClass().getName());

        System.out.println("Removed Attribute Name ="
                + httpSessionBindingEvent.getName() + ",value = "
                + httpSessionBindingEvent.getValue());

        System.out.println("\n#####################################\n");

        /*
         * if particular Attribute is removed, based on that if you want to
         * perform any operation then you can do it here.
         */

    }

    @Override
    public String toString()
    {
        return "User [name=" + name + ", age=" + age + "]";
    }

}

web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    metadata-complete="true" version="3.0">

    <display-name>HttpSessionBindingListenerDemo</display-name>

    <description>
        This is a simple web application with a source code organization
        based on the recommendations of the Application Developer's Guide.
    </description>

    <servlet>
        <servlet-name>HttpSessionAttributeTestServlet</servlet-name>
        <servlet-class>HttpSessionAttributeTestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HttpSessionAttributeTestServlet</servlet-name>
        <url-pattern>/listenerTest</url-pattern>
    </servlet-mapping>

</web-app>

index.html
<html>
<body>
    <a href="listenerTest">listenerTest</a>
</body>
</html>

Environment Used 

JDK version :1.7.0_51
Tomcat version : 7.0.50 

To Download HttpSessionBindingListenerDemoApp Project Click the below link

https://sites.google.com/site/javaee4321/servlets/HttpSessionBindingListenerDemoApp.zip?attredirects=0&d=1

See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • Friday, 20 June 2014

    Servlets : HttpSessionBindinglistener Introduction

    Master Core Java & Servlets!

    Subscribe to Ram N Java for beginner-friendly coding walkthroughs, session management tutorials, and hands-on Java guides!

    🔔 Subscribe to Ram N Java

    Introduction to HttpSessionBindingListener

    In Java web applications, the HttpSessionBindingListener interface belongs to the javax.servlet.http package. It allows a Java object to be notified whenever it is bound to or unbound from an HTTP session.

    Unlike global listeners that monitor session-wide or application-wide events, HttpSessionBindingListener is unique: it is implemented directly by the object (JavaBean/POJO) itself. When an instance of that object is placed into or removed from an HttpSession, the servlet container automatically triggers the corresponding lifecycle callback methods on that object.

    The Two Callback Methods

    The interface defines two essential methods that allow an object to manage its own lifecycle inside a user session:

    • valueBound(HttpSessionBindingEvent event): Invoked automatically when the object is added to an HTTP session using session.setAttribute(name, object). This is typically used to initialize session-specific resources or log a user login event.
    • valueUnbound(HttpSessionBindingEvent event): Invoked automatically when the object is removed via session.removeAttribute(name), replaced with another attribute, or when the session is invalidated or expires. This is ideal for cleaning up resources or updating active user state.
    public class UserBean implements HttpSessionBindingListener {
        private String username;

        public void valueBound(HttpSessionBindingEvent event) {
            System.out.println("Object bound to session: " + event.getName());
        }

        public void valueUnbound(HttpSessionBindingEvent event) {
            System.out.println("Object unbound from session: " + event.getName());
        }
    }

    Key Features of HttpSessionBindingListener

    • No Configuration Required: You do not need to register this listener in web.xml or annotate it with @WebListener. It works automatically when the object is placed in session scope.
    • Object-Level Granularity: While HttpSessionAttributeListener listens to every attribute change in the session, HttpSessionBindingListener notifies only the specific object that implements it.
    • Self-Contained State: Ideal for managing user session state, releasing dedicated connection handles, or tracking individual active logins.

    Recommended Related Tutorials

    Continue exploring servlet listeners and session handling with these tutorials from Ram N Java:


    Click here to watch in Youtube : https://www.youtube.com/watch?v=uua60uBHn8A

    Click the below Image to Enlarge
    HttpSessionBindinglistener Introduction
    HttpSessionBindinglistener Introduction
    HttpSessionBindinglistener Introduction
    HttpSessionBindinglistener Introduction
    See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • Tutorials