What is a Servlet Listener?

A Servlet Listener is a special class in the Servlet API that listens to specific events in a web application. These events include initialization, destruction, session creation, attribute changes, and more.

Types of Servlet Listeners

Example: ServletContextListener


import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class MyServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent event) {
        System.out.println("Application started!");
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        System.out.println("Application stopped!");
    }
}
      

What is a Filter?

A Filter is an object that intercepts requests and responses in a web application. Filters are used for pre-processing or post-processing requests and responses.

Uses of Filters

Example: Filter for Logging


import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter("/*")
public class LoggingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Filter initialized.");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("Request received at: " + System.currentTimeMillis());
        chain.doFilter(request, response); // Pass request to next filter or servlet
    }

    @Override
    public void destroy() {
        System.out.println("Filter destroyed.");
    }
}
      

Differences Between Listeners and Filters

Aspect Listeners Filters
Purpose Listens to application, session, or request lifecycle events. Intercepts and processes requests and responses.
Scope Application-wide events like startup, shutdown, or session tracking. Request/response level, applied to specific URL patterns.
Implementation Implements listener interfaces like ServletContextListener. Implements the Filter interface.
Usage Session creation, attribute changes, application initialization. Authentication, logging, input validation, header modification.