Using the HttpServlet class, we could make a Servlet able to handle HTTP requests made by the user and revert back with an appropriate HTTP response.
HttpServlet is an abstract class which extends abstract class GenericServlet.
HttpServlet class can also be used to create a Servlet. HttpServlet class is part of the Servlet API and the full path to import this class is
javax.servlet.http.HttpServlet.
HttpServlet methods
HttpServlet abstract class extendsGenericServlet abstract class(which implementsServlet
and ServletConfig interface) .
HttpServlet methods allow us to handle any sort of HTTP request made by the user, whether its GET, POST, DELETE etc
by providing appropriate methods to handle each of these HTTP requests.
Let's take a look at the methods part of javax.servlet.http.HttpServlet class.
This method allows a Servlet to handle the options request.
Creating a webpage which calls the Servlet
We are creating a webpage which calls the Servlet when user submits a form with a Get request.
<html>
<head>
<title> HttpServlet example </title>
</head>
<body>
Please enter your name in the box :
<form action = "MyServlet" method = "Get" >
<input type = "text" name = "username" />
<input type = "submit" value = "submit" />
</form>
</body>
</html>
Creating the Servlet class by extending HttpServlet
We are creating a Servlet extending the HttpServlet abstract class. HttpServlet class extends GenericServlet abstract class.
This class implements doGet() method of HttpServlet class to handle get request of the client.
A Servlet class is just a regular Java class which ends with a .java extension, hence we have named this file MyServlet1.java.
MyServlet1.java
import java.io.*;
//import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet1 extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
{
PrintWriter out = response.getWriter();
out.println("Hello from the Servlet made by extending HttpServlet abstract class.");
System.out.println("Putting the Servlet in service");
out.println("Welcome " + request.getParameter("name"));
}
}
}
Advertisement
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-
Project Folder - We have created a project folder named HTTPServ within
the webapps folder of Tomcat installation folder. This folder contains the Servlet class(.java) file and WEB-INF folder.
WEB-INF - This folder should contain the deployment descriptor file(web.xml) of your Java Servlet program.
classes - This folder should contain the compiled(.class) form of your Java Servlet class.
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 -
In deployment descriptor file, <servlet> has two child tags <servlet-name> and <servlet-class> :
<servlet-name> tag is used to specify a unique name for our Servlet class, we have given it a unique name MyGenericServlet.
<servlet-class> tag is used to specify the full qualified name of the Servlet class and in our example our Servlet class is named MyServlet1.
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 -
You could set the classpath by entering this command at the Command Prompt, but this only temporarily sets the classpath to the path of servlet-api.jar file. If you restart your system, you will have to set the classpath again.
set classpath=C:\apache-tomcat-9.0.2\lib\servlet-api.jar
In order to set the classpath permanently, you need to set your classpath system variables. A simple tutorial on how to permanently set the classpath system variables, you may read
How to permanently set the classpath system variable
Compiling the Servlet class
After setting the classpath, you need to compile the Servlet class by entering the command at the folder where you've stored the Servlet class file.
javac -d WEB-INF/classes MyServlet1.java
Executing the Servlet
First we execute the webpage containing the form, asking the user to enter the name and press submit button.
As soon as the user enters the name and submits the form, the request goes to the Servlet file (stored in the folder created by us named HTTPServ
within webapps folder).
Hence, you will see the URL containing the full path to the file with the request parameter -
The project folder - HTTPServ
The URL pattern of the Servlet class declared in web.xml - MyServlet
The parameter and its value sent along the GET request) - name = SkyGazer
This Servlet displays a personalised welcome message to the user,
by accessing the value of parameter username through request object.
Why to use HttpServlet to create a Servlet?
Using the HttpServlet class, we could make a Servlet able to handle HTTP requests made the user and revert back with appropriate HTTP response.
We know, HttpServlet extends GenericServlet, which is an abstract class as well( it implements Servlet and ServletConfig
interface). Hence, GenericServlet class has implemented all the methods of Servlet
interface except service(ServletRequest, ServletResponse) method of Servlet interface.
However, HttpServlet has already implemented the abstract service() method of GenericServlet class.
Hence, we only have to implement the required doGet(), doPost() etc method to handle the specific HTTP request made by the user.