Showing posts with label Servlet Listeners. Show all posts
Showing posts with label Servlet Listeners. Show all posts

Saturday, 21 June 2014

Servlets : HttpSession Listener Demo [Count logged in Users]

Master Core Java & Servlets!

Subscribe to Ram N Java for beginner-friendly coding walkthroughs, web architecture lessons, and hands-on Java guides!

🔔 Subscribe to Ram N Java

Tracking Logged-In Users with HttpSessionListener

In Java web applications, tracking the number of active sessions or concurrent logged-in users is a common requirement for dashboards, system monitoring, and session management. The standard, cleanest way to achieve this is by implementing the HttpSessionListener interface.

The web container automatically triggers callback methods on HttpSessionListener whenever a new HTTP session is created or an existing session is invalidated or times out. By updating a counter stored in the application-wide ServletContext, you can maintain an accurate, real-time count of active users.

How the Listener Works

The HttpSessionListener interface defines two primary lifecycle methods:

  • sessionCreated(HttpSessionEvent se): Invoked automatically when a new user session is initiated. Here, you increment the active user counter.
  • sessionDestroyed(HttpSessionEvent se): Invoked when a user logs out (session invalidated) or when the session expires due to inactivity. Here, you decrement the counter.
@WebListener
public class UserCounterListener implements HttpSessionListener {
    private static int activeUsers = 0;

    public void sessionCreated(HttpSessionEvent se) {
        activeUsers++;
        se.getSession().getServletContext().setAttribute("activeUsers", activeUsers);
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        activeUsers--;
        se.getSession().getServletContext().setAttribute("activeUsers", activeUsers);
    }
}

Key Advantages of Using HttpSessionListener

  • Automatic Session Lifecycle Management: No manual tracking or polling needed; the servlet container notifies the listener on lifecycle transitions.
  • Clean Separation: Decouples session analytics and user counting from individual business servlets.
  • Global Availability: Storing the count inside ServletContext makes it effortlessly accessible across all servlets, JSPs, and controllers.

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=fv8Idtevcg0

Click the below Image to Enlarge

HttpSessionListenerDemo Project Dir Structure

LoginServlet.java
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
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 LoginServlet 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();

        String userName = request.getParameter("username");
        out.print("Welcome " + userName);

        HttpSession session = request.getSession();
        session.setAttribute("uname", userName);

        ServletContext ctx = getServletContext();
        int totalUsers = (Integer) ctx.getAttribute("totalusers");
        int currentUsers = (Integer) ctx.getAttribute("currentusers");
        
        out.print("<br>total users= " + totalUsers);
        out.print("<br>current users= " + currentUsers);

        out.print("<br><a href='logout'>logout</a>");

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

}


LogoutServlet.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 LogoutServlet extends HttpServlet
{

    private static final long serialVersionUID = 1L;

    public void doGet( HttpServletRequest request, HttpServletResponse response )
            throws ServletException, IOException
    {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        HttpSession session = request.getSession(false);
        session.invalidate();

        out.print("You are successfully logged out");

        out.close();
    }

}


CountUserListener.java
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class CountUserListener implements HttpSessionListener
{
    ServletContext ctx = null;
    static int     totalUserCount = 0, currentUserCount = 0;

    public void sessionCreated( HttpSessionEvent httpSessionEvent )
    {
        System.out.println("sessionCreated method has been called in "
                + this.getClass().getName());

        
        totalUserCount++;
        currentUserCount++;

        ctx = httpSessionEvent.getSession().getServletContext();
        
        ctx.setAttribute("totalusers", totalUserCount);
        ctx.setAttribute("currentusers", currentUserCount);

    }

    public void sessionDestroyed( HttpSessionEvent httpSessionEvent )
    {
        
        System.out.println("sessionDestroyed method has been called in "
                + this.getClass().getName());       
        currentUserCount--;
        ctx.setAttribute("currentusers", currentUserCount);
    }

}


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>HttpSessionListenerDemo</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>LoginServlet</servlet-name>
        <servlet-class>LoginServlet</servlet-class>
    </servlet>
    
    <servlet>
        <servlet-name>LogoutServlet</servlet-name>
        <servlet-class>LogoutServlet</servlet-class>
    </servlet>


    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>LogoutServlet</servlet-name>
        <url-pattern>/logout</url-pattern>
    </servlet-mapping>


    <listener>
        <listener-class>CountUserListener</listener-class>
    </listener>
    
</web-app>

index.html
<form action="login">
    Name:<input type="text" name="username"><br> 
    
    Password:<input type="password" name="password"><br> 
    
    <input type="submit" value="login" />
    
</form>

Environment Used 

JDK version :1.7.0_51
Tomcat version : 7.0.50 

To Download HttpSessionListenerCountUserDemoApp Project Click the below link

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

See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • Servlets Listeners

    Master Core Java & Servlets!

    Subscribe to Ram N Java for beginner-friendly coding walkthroughs, web architecture lessons, and hands-on Java guides!

    🔔 Subscribe to Ram N Java

    What Are Servlet Listeners?

    In Java web applications, a Servlet Listener is a special Java class designed to monitor and respond to lifecycle events and state changes occurring in the web container. Built on the classic Observer design pattern, listeners automatically run custom code when specific events occur.

    Instead of manually polling or handling setup logic inside servlets, listeners allow you to automatically execute initialization routines, clean up system resources, track active user sessions, or react whenever attributes are added, updated, or removed across different servlet scopes.

    Major Types of Servlet Listeners

    Servlet listeners in Java EE / Jakarta EE are broadly divided into three main categories based on the scope they monitor:

    • ServletContext Listeners: Monitor application-wide lifecycle events and attributes.
      Examples: ServletContextListener (monitors startup and shutdown) and ServletContextAttributeListener (tracks context attribute changes).
    • HttpSession Listeners: Track user session creation, expiration, and attribute management.
      Examples: HttpSessionListener (tracks active sessions/logged-in users) and HttpSessionAttributeListener (detects session data modifications).
    • ServletRequest Listeners: Intercept individual client HTTP request lifecycles.
      Examples: ServletRequestListener (runs code on request creation/destruction) and ServletRequestAttributeListener.

    Why Use Servlet Listeners?

    • Application Startup & Teardown: Ideal for initializing shared database connection pools or background tasks when the web app starts, and safely releasing them on shutdown.
    • Session Tracking & Analytics: Track the total count of active sessions or concurrent users logged into the platform in real time.
    • Loose Coupling: Decouple event-driven logic and monitoring tasks completely from your core business servlets.
    • Simple Configuration: Easily configure listeners in web.xml using the <listener> tag or by annotating the class with @WebListener.

    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=7NtVn1_TSAg

    Click the below Image to Enlarge
    Servlets Listeners
    Servlets Listeners
    See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • 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
  • Saturday, 14 June 2014

    Servlets : ServletRequestListener Demo

    Master Core Java & Servlets!

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

    🔔 Subscribe to Ram N Java

    What is ServletRequestListener?

    In Java web applications, the ServletRequestListener interface (from the javax.servlet package) is used to monitor the lifecycle of incoming client HTTP requests.

    Whenever a request enters the web application and comes into scope, or when it leaves the scope after the response is generated, the servlet container notifies the registered listener. This makes it an ideal place to capture incoming IP addresses, measure request processing duration, log diagnostic information, or set up request-scoped resources.

    Lifecycle Callback Methods

    The ServletRequestListener interface defines two core methods that run for every client request:

    • requestInitialized(ServletRequestEvent sre): Triggered by the container when an incoming request is initialized and about to enter the first servlet or filter in the chain.
    • requestDestroyed(ServletRequestEvent sre): Triggered when the request has completed its processing, the response has been handled, and the request object is about to be reclaimed.
    @WebListener
    public class LoggingRequestListener implements ServletRequestListener {

        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            ServletRequest request = sre.getServletRequest();
            System.out.println("Request initialized from IP: " + request.getRemoteAddr());
        }

        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            System.out.println("Request processed and destroyed successfully.");
        }
    }

    Key Benefits of ServletRequestListener

    • Request Auditing & Monitoring: Easily record timestamps, client IP addresses, and request frequency across all application endpoints.
    • Decoupled Architecture: Completely decouples request-level lifecycle tracking and performance telemetry from individual business servlets.
    • Simple Configuration: Can be activated globally with a simple @WebListener annotation or configured in web.xml.

    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=48HCaqLXr5M

    Click the below Image to Enlarge

    ServletRequestListenerDemo Project Dir Structure

    HitCountServlet.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;
    
    public class HitCountServlet 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();
            out.print("<h2> This is target Servlet </h2>");
            out.print("<h2>the no of hits for this application is "
                    + MyServletRequestListener.count);
    
        }
    
        public void destroy()
        {
            System.out.println("-----------------------------------------");
            System.out.println(" destroy method is called in "
                    + this.getClass().getName());
            System.out.println("-----------------------------------------");
        }
    
    }
    

    MyServletRequestListener.java
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    
    public class MyServletRequestListener implements ServletRequestListener
    {
    
        public static int count = 0;
    
        @Override
        public void requestInitialized(ServletRequestEvent servletRequestEvent)
        {
            count++;
    
            System.out.println("\n###################################\n");
    
            System.out.println("requestInitialized method has been called in "
                    + this.getClass().getName());
    
            ServletRequest servletRequest = servletRequestEvent.getServletRequest();
    
            System.out.print(servletRequest + " is Created or Initialized:");
    
            System.out.println("\n#####################################\n");
    
            /*
             * if request is created or initialized, based on that if you want to
             * perform any operation then you can do it here.
             */
    
        }
    
        @Override
        public void requestDestroyed(ServletRequestEvent servletRequestEvent)
        {
            System.out.println("\n###################################\n");
    
            System.out.println("requestDestroyed method has been called in "
                    + this.getClass().getName());
    
            ServletRequest servletRequest = servletRequestEvent.getServletRequest();
    
            System.out.print(servletRequest + " destroyed:");
    
            System.out.println("\n#####################################\n");
    
            /*
             * if request is destroyed , 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>ServletRequestListenerDemo</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>HitCountServlet</servlet-name>
            <servlet-class>HitCountServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>HitCountServlet</servlet-name>
            <url-pattern>/hitCount</url-pattern>
        </servlet-mapping>
    
        <listener>
            <listener-class>MyServletRequestListener</listener-class>
        </listener>
    
    
    </web-app>
    

    index.html
    <html>
    <body>
        <a href="hitCount">hitCount</a>
    </body>
    </html>
    
    
    Environment Used 

    JDK version :1.7.0_51
    Tomcat version : 7.0.50 

    To Download ServletRequestListenerDemoApp Project Click the below link

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

    See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • No comments:

    Servlets : ServletRequestListener 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

    Introduction to ServletRequestListener

    In Java web applications, managing and tracking client requests is a fundamental requirement. The ServletRequestListener interface (part of the javax.servlet package) provides a callback mechanism that notifies your application when an incoming HTTP request is initialized and when it is destroyed.

    Whenever a request reaches the servlet container and comes into the scope of the web application, the container triggers an event before calling any filter or servlet. Similarly, once the response is fully generated and delivered, a completion event is dispatched. This makes ServletRequestListener the ideal choice for logging, profiling request durations, and initializing request-scoped resources.

    Key Methods in ServletRequestListener

    The interface contains two primary lifecycle methods:

    • requestInitialized(ServletRequestEvent sre): Invoked when a request comes into scope. You can access the ServletRequest instance and inspect incoming headers, parameters, remote client IP addresses, or start execution timers.
    • requestDestroyed(ServletRequestEvent sre): Invoked when the request is about to go out of scope after the response has been committed. This is suitable for calculating total execution time or releasing temporary resources.
    @WebListener
    public class RequestLoggingListener implements ServletRequestListener {

        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            System.out.println("ServletRequest has been initialized: " + sre.getServletRequest().getRemoteAddr());
        }

        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            System.out.println("ServletRequest is about to be destroyed.");
        }
    }

    Why Use ServletRequestListener?

    • Centralized Request Logging: Capture metadata for every incoming HTTP request without repeating code across individual servlets.
    • Performance Telemetry: Measure total round-trip request latency across your entire web application.
    • Clean Lifecycle Separation: Keep diagnostic, monitoring, and profiling tasks cleanly decoupled 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=04DWpaXQIH4

    Click the below Image to Enlarge
    ServletRequestListener 
    ServletRequestListener 
    ServletRequestListener 
    See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • No comments:
    Older Posts Home

    Tutorials