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
- ServletContextListener: Listens to lifecycle events of the
ServletContext(application startup and shutdown). - HttpSessionListener: Listens to lifecycle events of
HttpSessionobjects (creation and destruction). - ServletRequestListener: Listens to lifecycle events of
ServletRequest(creation and destruction). - Attribute Listeners: Listens to events when attributes are added, removed, or replaced:
ServletContextAttributeListenerHttpSessionAttributeListenerServletRequestAttributeListener
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
- Authentication and authorization.
- Logging and auditing request data.
- Data compression or decompression.
- Adding or modifying HTTP headers.
- Input validation and sanitation.
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. |