Showing posts with label ServletRequestAttributeListener. Show all posts
Showing posts with label ServletRequestAttributeListener. Show all posts

Wednesday, 11 June 2014

Servlets : ServletRequestAttributeListener Demo

Master Core Java & Servlets!

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

🔔 Subscribe to Ram N Java

What is ServletRequestAttributeListener?

In Java web applications, attributes bound to a ServletRequest are widely used to share data between servlets, filters, and JSP views during a single request-response lifecycle. The ServletRequestAttributeListener interface (from the javax.servlet package) provides callback notifications whenever attributes are added to, removed from, or replaced within a request.

By registering a ServletRequestAttributeListener, your application can automatically track and audit dynamic data flow as a request travels through filters, forwardings, or includes, keeping tracking logic completely decoupled from business servlets.

Core Lifecycle Callback Methods

The ServletRequestAttributeListener interface defines three essential methods receiving a ServletRequestAttributeEvent:

  • attributeAdded(ServletRequestAttributeEvent srae): Triggered when a new attribute is bound to the request using request.setAttribute(name, value).
  • attributeRemoved(ServletRequestAttributeEvent srae): Triggered when an attribute is unbound from the request using request.removeAttribute(name).
  • attributeReplaced(ServletRequestAttributeEvent srae): Triggered when an existing attribute value in the request is overwritten with a new value under the same name.
@WebListener
public class RequestAttributeLoggingListener implements ServletRequestAttributeListener {

    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae) {
        System.out.println("Request Attribute Added: " + srae.getName() + " = " + srae.getValue());
    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae) {
        System.out.println("Request Attribute Removed: " + srae.getName());
    }

    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae) {
        System.out.println("Request Attribute Replaced: " + srae.getName() + " (Previous: " + srae.getValue() + ")");
    }
}

Key Benefits & Use Cases

  • Request Pipeline Auditing: Monitor attributes attached to requests across request dispatchers, forwards, and filter chains.
  • Debugging & Diagnostics: Quickly detect unintended modifications or replacements of request attributes during debugging sessions.
  • Zero-Boilerplate Configuration: Simply annotate your listener class with @WebListener without requiring manual deployment descriptor changes.

Recommended Related Tutorials

Continue exploring servlet listeners and web architecture with these tutorials from Ram N Java:


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

Click the below Image to Enlarge

ServletRequestAttributeListenerDemo Project Dir Structure

ServletRequestAttributeTestServlet.java
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletRequestAttributeTestServlet 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");

        sleep();
        
        request.setAttribute("CompanyName", "Wipro");

        sleep();

        request.setAttribute("CompanyName", "Infosys");

        sleep();

        request.removeAttribute("CompanyName");

    }

    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("-----------------------------------------");
    }

}

MyServletRequestAttributeListener.java
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;

public class MyServletRequestAttributeListener implements
        ServletRequestAttributeListener
{

    @Override
    public void attributeAdded(
            ServletRequestAttributeEvent servletRequestAttributeEvent )
    {
        System.out.println("\n###################################\n");

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

        System.out.println("Newly added Attribute Name ="
                + servletRequestAttributeEvent.getName() + ",value = "
                + servletRequestAttributeEvent.getValue());

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

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

    }

    @Override
    public void attributeRemoved(
            ServletRequestAttributeEvent servletRequestAttributeEvent )
    {
        System.out.println("\n###################################\n");

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

        System.out.println("Removed Attribute Name ="
                + servletRequestAttributeEvent.getName() + ",value = "
                + servletRequestAttributeEvent.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 void attributeReplaced(
            ServletRequestAttributeEvent servletRequestAttributeEvent )
    {
        System.out.println("\n###################################\n");

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

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

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

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

    }

}

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>ServletRequestAttributeListenerDemo</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>ServletRequestAttributeTestServlet</servlet-name>
        <servlet-class>ServletRequestAttributeTestServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>ServletRequestAttributeTestServlet</servlet-name>
        <url-pattern>/listenerTest</url-pattern>
    </servlet-mapping>

    <listener>
        <listener-class>MyServletRequestAttributeListener</listener-class>
    </listener>


</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 ServletRequestAttributeListenerDemoApp Project Click the below link

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

See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • Tuesday, 10 June 2014

    Servlets : ServletRequestAttributeListener Introduction

    Master Core Java & Servlets!

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

    🔔 Subscribe to Ram N Java

    What is ServletRequestAttributeListener?

    In Java web applications, sharing data during the lifespan of a single HTTP request is a common requirement. The ServletRequestAttributeListener interface (part of the javax.servlet package) provides a callback mechanism to observe and react to attribute changes occurring within the ServletRequest scope.

    While request lifecycle listeners monitor when a request enters or exits the web container, ServletRequestAttributeListener focuses strictly on modifications to data bound to that request. Whenever an attribute is added, removed, or replaced on a ServletRequest object, the container notifies registered listeners, making it useful for logging, debugging data flow across filters and servlets, or auditing state.

    Core Callback Methods

    The ServletRequestAttributeListener interface defines three essential lifecycle methods receiving a ServletRequestAttributeEvent:

    • attributeAdded(ServletRequestAttributeEvent srae): Invoked when a new attribute is bound to the request via request.setAttribute(name, value).
    • attributeRemoved(ServletRequestAttributeEvent srae): Invoked when an existing attribute is removed from the request via request.removeAttribute(name).
    • attributeReplaced(ServletRequestAttributeEvent srae): Invoked when an attribute value on the request is overwritten with a new value under the same name.
    @WebListener
    public class RequestAttributeOverviewListener implements ServletRequestAttributeListener {

        @Override
        public void attributeAdded(ServletRequestAttributeEvent srae) {
            System.out.println("Attribute added to request: " + srae.getName());
        }

        @Override
        public void attributeRemoved(ServletRequestAttributeEvent srae) {
            System.out.println("Attribute removed from request: " + srae.getName());
        }

        @Override
        public void attributeReplaced(ServletRequestAttributeEvent srae) {
            System.out.println("Attribute replaced in request: " + srae.getName());
        }
    }

    Key Advantages & Common Use Cases

    • Request Pipeline Tracking: Monitor how data attributes evolve as requests pass through filters, servlets, and forward destinations.
    • Debugging & Troubleshooting: Identify unexpected attribute overwrites or removals during request handling.
    • Decoupled Architecture: Keep logging and telemetry separate from core business servlets.

    Recommended Related Tutorials

    Continue exploring servlet listeners and web architecture with these tutorials from Ram N Java:


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

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

  • Servlets Tutorial
  • All Design Patterns Links
  • Tutorials