Servlet – Event and Listener
Last Updated :
25 Feb, 2022
The term “event” refers to the occurrence of something. An event occurs when the state of an object changes. When these exceptions occur, we can conduct certain crucial actions, such as collecting total and current logged-in users, establishing database tables when deploying the project, building database connection objects, and so on. The javax.servlet and javax.servlet.http packages contain numerous Event classes and Listener interfaces.
The primary function of a Listener in a GUI application is to concentrate an event from a specific GUI component, handle it using Listener functions, and provide the response to the GUI application. The following technique is referred to as Event Handling or Event Delegation Model in GUI applications.
Event Categories
Servlet events are divided into two categories: high-level and low-level.
- Servlet context-level (application-level) event: This event concerns resources or states held at the appliance servlet context object’s extent.
- Session-level event: It involves resources or states associated with a sequence of requests from a single user session; in other words, it is associated with the HTTP session object.
There are two types of events on each of those two levels:
- Changes in the life cycle
- Changes in attributes
For each of the four-event categories, we can define one or more event listener classes. Multiple event categories can be monitored by a single listener class. Implementing an interface or interfaces from the javax.servlet package or javax.servlet.http package is a common way to make an occasion class.
Event Listener Interfaces
Listener Interface
|
Description
|
javax.servlet.AsyncListener |
Listener that will be alerted if an asynchronous action started on a ServletRequest to which the listener was attached has completed, timed out, or failed. |
javax.servlet.ServletContextListener |
Interface for receiving ServletContext lifecycle change notification events. |
javax.servlet.ServletContextAttributeListener |
Interface for receiving ServletContext attribute changes notification events. |
javax.servlet.ServletRequestListener |
Interface for receiving notifications about requests entering and exiting a web application’s scope. |
javax.servlet.ServletRequestAttributeListener |
Interface for receiving ServletRequest attribute changes notification events. |
javax.servlet.http.HttpSessionListener |
Interface for receiving HttpSession lifecycle changes notification events. |
javax.servlet.http.HttpSessionBindingListener |
When an object is tied to or freed from a session, it is alerted by javax.servlet.http.HttpSessionBindingListener. |
javax.servlet.http.HttpSessionAttributeListener |
Interface for receiving HttpSession attribute change notification events. |
javax.servlet.http.HttpSessionActivationListener |
Objects that are connected to a javax.servlet.http.HttpSessionActivationListener |
Steps for Using Listeners
If we want to utilize listener listeners in our web apps, we must follow the steps below:
Step 1: Get the Listener class ready.
Take one user-defined class, which must be a Listener interface implementation class. For instance, consider the public class Listener is implemented by MyListener{……}
Step 2: In the web.xml file, configure the Listener class.
The following XML tags must be used in the web.xml file to configure the Listener class:
<web-app>
……
<listener>
<listener-class>Name of the Listener class</listener-class>
</listener>
……
</web-app>
Except for HttpSessionBindingListener and HttpSessionActivationListener, all Listeners require the aforementioned listener configuration.
Methods for Event Listeners and Related Classes
1) Methods for ServletContextListeners and the ServletContextEvent Class
The following methods are defined by ServletContextListener:
Methods
|
Description
|
void contextInitialized(ServletContextEvent sce) |
This function is used to inform the listener that the servlet context has been formed and that the application is now ready to handle requests. |
void contextDestroyed(ServletContextEvent sce) |
This function is used to alert the listener that the program is about to be terminated. |
When a web application is deployed on the server, the ServletContextEvent is informed. It includes the technique shown below, which your listener might call:
ServletContext getServletContext(): This method retrieves the servlet context object that was created or is going to be deleted, from which you may get any information you want.
2) Methods for ServletContextAttributeListener and the ServletContextAttributeEvent Class
ServletContextAttributeListener specifies the following methods:
Methods
|
Description
|
void attributeAdded(ServletContextAttributeEvent scae): |
It’s used to inform the listener that the servlet context has been updated with an attribute. |
void attributeRemoved(ServletContextAttributeEvent scae): |
It’s used to inform the listener that an attribute from the servlet context has been deleted. |
void attributeReplaced(ServletContextAttributeEvent scae) |
It’s used to inform the listener when an attribute in the servlet context has been replaced. |
The event class ServletContextAttributeEvent is used to notify about changes to the attributes of a web application’s servlet context. It includes the techniques listed below, which your listener can use:
- String getName() returns the name of the attribute that was added, deleted, or replaced as a string.
- Object getValue() is a method for retrieving the value of an attribute that has been added, deleted, or replaced. This method returns the previous value, not the new value, in the event of a replaced attribute.
3) Methods for HttpSessionListeners and the HttpSessionEvent Class
HttpSessionListener specifies the following methods:
Methods
|
Description
|
void sessionCreated(HttpSessionEvent hse) |
It’s used to inform the listener that a session has been established. |
void sessionDestroyed(HttpSessionEvent hse): |
It’s used to let the listener know that a session has been terminated. |
When the session object is modified, HttpSessionEvent is informed. It includes the technique shown below, which your listener might call:
HttpSession getSession(): This function is used to obtain the generated or deleted session object.
4) Methods for HttpSessionAttributeListener and the HttpSessionBindingEvent Class
HttpSessionAttributeListener specifies the following methods:
Methods
|
Description
|
void attributeAdded(HttpSessionBindingEvent hsbe) |
It informs the listener that a new attribute has been introduced to the session. |
void attributeRemoved(HttpSessionBindingEvent hsbe) |
It’s used to inform the listener when a session attribute has been deleted. |
void attributeReplaced(HttpSessionBindingEvent hsbe) |
It’s used to inform the listener when an attribute in the session has been replaced. |
When an object implements HttpSessionBindingListener is bound or freed from a session, HttpSessionBindingEvent is delivered to that object, or to a HttpSessionAttributeListener that has been set in the deployment descriptor when any attribute is bound, unbound, or replaced in a session. It includes the techniques listed below, which your listener can use:
- String getName(): returns the name of the attribute that was added, deleted, or replaced as a string.
- Object getValue(): is a method for retrieving the value of an attribute that has been added, deleted, or replaced. This method returns the previous value, not the new value, in the event of a replaced attribute.
- HttpSession getSession(): This method is used to obtain the session object whose attribute has changed.
Example
To demonstrate the servlet listener in action, let’s create a basic web application. In Eclipse, we’ll build a dynamic web project called ServletListenerExample, and the project structures will look like this.

The context init params and listener settings will be defined in web.xml. The class for database connectivity is DatabaseManager. The object will be added to the servlet context as an attribute. I’ll deal with the session, characteristics, and other things in MyServlet. We’ll use the AppContextListener to read the servlet context init parameters and use them to create the DatabaseManager object, which we’ll then set as an attribute on the ServletContext object. ServletContextAttributeListener is a simple implementation for logging the event when an attribute in the servlet context is added, removed, or replaced. HttpSessionListener is a simple implementation to log the event when the session is created or destroyed. ServletRequestListener is to log the servletRequest IP address when the request is initialized and destroyed.
web.xml
XML
<? xml version = "1.0" encoding = "UTF-8" ?>
< web-app >
< display-name >ServletListenersGfg</ display-name >
< context-param >
< param-name >DBUSER</ param-name >
< param-value >root</ param-value >
</ context-param >
< context-param >
< param-name >DBPWD</ param-name >
< param-value >root</ param-value >
</ context-param >
< context-param >
< param-name >DBURL</ param-name >
</ context-param >
< listener >
< listener-class >com.geeksforgeeks.listener.AppContextListener</ listener-class >
</ listener >
< listener >
< listener-class >com.geeksforgeeks.listener.AppContextAttributeListener</ listener-class >
</ listener >
< listener >
< listener-class >com.geeksforgeeks.listener.MySessionListener</ listener-class >
</ listener >
< listener >
< listener-class >com.geeksforgeeks.listener.MyServletRequestListener</ listener-class >
</ listener >
</ web-app >
|
DatabaseManager.java
Java
package com.geeksforgeeks.db;
import java.sql.Connection;
public class DatabaseManager {
private String dbURL;
private String user;
private String password;
private Connection con;
public DatabaseManager(String url, String u, String p)
{
this .dbURL = url;
this .user = u;
this .password = p;
}
public Connection getConnection() { return this .con; }
public void closeConnection()
{
}
}
|
AppContextAttributeListener.java
Java
package com.geeksforgeeks.listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class AppContextAttributeListener
implements ServletContextAttributeListener {
public void
attributeAdded(ServletContextAttributeEvent
servletContextAttributeEvent)
{
System.out.println(
"ServletContext attribute added::{"
+ servletContextAttributeEvent.getName() + ","
+ servletContextAttributeEvent.getValue()
+ "}" );
}
public void
attributeReplaced(ServletContextAttributeEvent
servletContextAttributeEvent)
{
System.out.println(
"ServletContext attribute replaced::{"
+ servletContextAttributeEvent.getName() + ","
+ servletContextAttributeEvent.getValue()
+ "}" );
}
public void
attributeRemoved(ServletContextAttributeEvent
servletContextAttributeEvent)
{
System.out.println(
"ServletContext attribute removed::{"
+ servletContextAttributeEvent.getName() + ","
+ servletContextAttributeEvent.getValue()
+ "}" );
}
}
|
AppContextListener.java
Java
package com.geeksforgeeks.listener;
import com.geeksforgeeks.db.*;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class AppContextListener
implements ServletContextListener {
public void contextInitialized(
ServletContextEvent servletContextEvent)
{
ServletContext ctx
= servletContextEvent.getServletContext();
String url = ctx.getInitParameter( "DBURL" );
String u = ctx.getInitParameter( "DBUSER" );
String p = ctx.getInitParameter( "DBPWD" );
DatabaseManager dbManager
= new DatabaseManager(url, u, p);
ctx.setAttribute( "DBManager" , dbManager);
System.out.println(
"Database connection initialized for Application." );
}
public void contextDestroyed(
ServletContextEvent servletContextEvent)
{
ServletContext ctx
= servletContextEvent.getServletContext();
DatabaseManager dbManager
= (DatabaseManager)ctx.getAttribute(
"DBManager" );
dbManager.closeConnection();
System.out.println(
"Database connection closed for Application." );
}
}
|
MyServletRequestListener.java
Java
package com.geeksforgeeks.listener;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class MyServletRequestListener
implements ServletRequestListener {
public void requestDestroyed(
ServletRequestEvent servletRequestEvent)
{
ServletRequest servletRequest
= servletRequestEvent.getServletRequest();
System.out.println(
"ServletRequest destroyed. Remote IP="
+ servletRequest.getRemoteAddr());
}
public void requestInitialized(
ServletRequestEvent servletRequestEvent)
{
ServletRequest servletRequest
= servletRequestEvent.getServletRequest();
System.out.println(
"ServletRequest initialized. Remote IP="
+ servletRequest.getRemoteAddr());
}
}
|
MySessionListener.java
Java
package com.geeksforgeeks.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class MySessionListener
implements HttpSessionListener {
public void
sessionCreated(HttpSessionEvent sessionEvent)
{
System.out.println(
"Session Created:: ID="
+ sessionEvent.getSession().getId());
}
public void
sessionDestroyed(HttpSessionEvent sessionEvent)
{
System.out.println(
"Session Destroyed:: ID="
+ sessionEvent.getSession().getId());
}
}
|
MyServlet.java
Java
package com.geeksforgeeks.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet ( "/MyServlet" )
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
ServletContext ctx = request.getServletContext();
ctx.setAttribute( "User" , "GeeksForGeeks" );
String user = (String)ctx.getAttribute( "User" );
ctx.removeAttribute( "User" );
HttpSession session = request.getSession();
session.invalidate();
PrintWriter out = response.getWriter();
out.write( "Hi " + user);
}
}
|
Output:
When we deploy our application and access MyServlet, the server log file will include the following logs.

In the browser, we’ll see something like this.

Similar Reads
Servlet - Context Event and Context Listener
ServletContextEvent class provides alerts/notifications for changes to a web application's servlet context. ServletContextListener is a class that receives alerts/notifications about changes to the servlet context and acts on them. When the context is initialized and deleted, the ServletContextListe
3 min read
Servlet - HttpSessionEvent and HttpSessionListener
In Java, HttpSessionEvent is a class, which is representing event notifications for changes or updates to sessions within a web application. Similarly, the interface for this event is HttpSessionListener, which is for receiving notification events about HttpSession lifecycle changes. As a means to,
3 min read
Difference between Servlet and JSP
Brief Introduction: Servlet technology is used to create a web application. A servlet is a Java class that is used to extend the capabilities of servers that host applications accessed by means of a request-response model. Servlets are mainly used to extend the applications hosted by web services. J
3 min read
Difference between Servlet and JSF
ServletServlets are Java programs that run on a server and handle client requests to generate dynamic web content. They operate at a lower level within the Java EE framework, providing a powerful and flexible mechanism for building web applications. Servlets are mainly used to extend the application
2 min read
HTML DOM addEventListener() Method
The addEventListener() method attaches an event handler to the specified element. Syntax: element.addEventListener(event, function, useCapture) Note: The third parameter use capture is usually set to false as it is not used. Below program illustrates the DOM addEventListener(): Example: <!DOCTYPE
1 min read
Servlet - RequestDispatcher
The RequestDispatcher is an Interface that comes under package javax.servlet. Using this interface we get an object in servlet after receiving the request. Using the RequestDispatcher object we send a request to other resources which include (servlet, HTML file, or JSP file). A RequestDispatcher obj
5 min read
Servlet - Authentication Filter
Servlets are the Java programs that run on the Java-enabled web server or application server. They are used to handle the request obtained from the webserver, process the request, produce the response, then send a response back to the webserver. Authentication Filter In Servlets Authentication may b
2 min read
Difference between Java Servlet and CGI
The world has changed into a mobile-first era but even today, none of the applications could emerge as effective as the web-based apps. Surfacing on top of this is the prevalence of progressive web apps that perform functions identical to mobile apps. In this article, we will understand the differen
3 min read
Life Cycle of a Servlet
The entire life cycle of a Servlet is managed by the Servlet container, which uses the jakarta.servlet.Servlet interface to understand the Servlet object and manage it. So, before creating a Servlet object, let's first understand the life cycle of the Servlet object, which is actually understanding
7 min read
Servlet - Filter
A filter is an object that is used throughout the pre-and post-processing stages of a request. Filters are mostly used for filtering tasks such as server-side logging, authentication, and authorization, input validation, and so on. The servlet is pluggable, which means that the entry is specified in
3 min read