< Prev
Next >



ServletRequestListener



In this article, we are going to understand how to create a listener class which listens to the event of arrival of a new user request to a web application. and when this request is finally served. For this, we are going to create a webpage which asks the user to enter his name and password in a form and click the submit button.

On submitting the form, the user request not only calls to the requested Servlet class but also calls the listener class, listening to an event of arrival of a new user request.

Within the Listener class, using the ServletRequest object, we could also access the information about the request made by the user.

This information about the user request could be -

So, let's begin by creating a Listener class by implementing ServletRequestListener interface and by providing implementation of its methods. ServletRequestListener is a part of the java.util.* package.




ServletRequestListener methods


Let's take a look at the methods of ServletRequestListener interface.

Methods Description
void requestInitialized(ServletRequestEvent sre) This method receives notification about the arrival of a new user request.
void requestDestroyed(ServletRequestEvent sre) This method receives notification when the request has been served.





Creating a webpage which calls the Servlet


First we execute the webpage containing the form, asking the user to enter his/her name and city and press submit button. On submitting the form, the user request not only goes to the Servlet class but also to the listener class, listening to an event of arrival of a new user request.

Form1.jsp
<html>

<head>
<title> ServletRequest Demo </title>
</head>


<body>
Please enter your details :

<form action = "MyServlet">
Name : <input type = "text"   name = "username" />
City : <input type = "text"   name = "cityname" /> <br/>


<input type = "submit" value = "submit" />
</form>

</body>
</html>





Creating a listener class to listen to an event of user request




The information about request is displayed on the Tomcat Web Server window, as we are using System.out.println() method.

RequestListener1.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.EventListener;
import java.util.*;


public class RequestListener1 implements ServletRequestListener
{

public void requestInitialized(ServletRequestEvent sre)
{	
ServletRequest request = sre.getServletRequest();
System.out.println("A new request has arrived");
System.out.println("Accessing request parameters using ServletRequest object");
System.out.println("Welcome "+ request.getParameter("username"));
System.out.println("How is weather in " + request.getParameter("cityname") + "?");
System.out.println("Request Locale : " + request.getLocale());
System.out.println("Request Protocol : " + request.getProtocol());
System.out.println("Request ContentType : " + request.getContentType());
System.out.println("Request Local IP : " + request.getLocalAddr());
System.out.println("Request Server Name : " + request.getServerName());
}


public void requestDestroyed(ServletRequestEvent sre)
{
	ServletRequest request = sre.getServletRequest();
	System.out.println("Request has been served and ended");
}

}



Directory Structure of Servlet files




The diagram above depicts how to arrange the Servlet files in a specific directory structure, as per Java Servlet Specification-






Creating the Deployment Descriptor file


As per the Java Servlet specifications, every web application based on Servlet must have a Deployment Descriptor file(an XML file) named web.xml. So, let's create one -


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">

  <display-name>Welcome tomcat</display-name>
  <description>
     Welcome tomcat
  </description>

  
<listener>
	 <listener-class>RequestListener1 </listener-class>
</listener>



<servlet>
 	<servlet-name>MyServlet</servlet-name>
	<servlet-class>MyServlet1</servlet-class>
</servlet>



<servlet-mapping>
	<servlet-name>MyServlet</servlet-name>
	<url-pattern>/Serv</url-pattern>
</servlet-mapping>

</web-app>


In deployment descriptor file, <listener> tag has a child tag <listener class> :




<servlet> tag has two child tags <servlet-name> and <servlet-class> :






Note


The child tag <servlet-name> of <servlet> tag is matched with the <servlet-name> child tag of <servlet-mapping>. The <url-pattern> child tag is used to specify the URL to access Servlet and we have named this URL MyServlet.




Setting the classpath


Much of the support for developing the web applications based on the Java Servlet technology does not come with the core Java. Hence, in order to compile the Servlet programs, we have to set the classpath to a jar file named servlet-api.jar.

This jar file provides all the classes that are required for the Servlet programming and it comes within the lib Folder of Tomcat installation folder.

For example, in our case we have installed Tomcat Web Server within the C: Drive, hence the path to our lib folder containing the servlet-api.jar is - C:\apache-tomcat-9.0.2\lib

There are two ways to set the classpath -




Compiling the Servlet class


After setting the classpath, you need to compile the Servlet class and the Listener class by entering the command at the folder where you've stored the Servlet class file.

javac -d WEB-INF/classes MyServlet1.java


javac -d WEB-INF/classes RequestListener1.java





Executing the Servlet


First we execute the webpage containing the form, asking the user to enter his/her name and city and press submit button.



As user enters the asked details and submits the form, the request not only goes to the Servlet and also to the listener class RequestListener1.java, listening to the arrival of a new request event.

Hence, you will see the Servlet class in execution and displaying the window with the following message, asking the user to check the Tomcat Server Window to check details about the request made.




A subsequent call to request listener class named RequestListener1.java which displays the information about the user request and also displays the value of parameter username, cityname using the ServletRequest on the Tomcat Web Server window .







Please share this article -

Facebook Google Pinterest Reddit Tumblr Twitter



< Prev
Next >
< Listener Interfaces
ServletRequestAttributeListener >
Please subscribe our social media channels for notifications, we post a new article everyday.

Decodejava Google+ Page Decodejava Facebook Page  DecodeJava Twitter Page

Coming Next
-
Python

Ad2