As we learned in previous chapters, the Servlet life cycle will be managed by the Servlet container that is under the Web/Application server. Whenever an HttpRequest comes from the client browser, the servlet container will map the request to the corresponding servlet based on the URL mappings provided in the deployment descriptor file - web.xml. For example: Consider the below servlet mappings in the web.xml file.
XML
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
Here, whenever there is a "/hello" URL coming from the client request, we are mapping it to the "HelloServlet" class. Instead of providing these mappings in the web.xml file, we can simply provide an annotation in the Servlet as below,
Java
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
// Code to be executed...
}
Servlet Annotations
Java Servlets provides a number of annotations to allow users to declare servlets, filters, listeners in the javax.servlet.annotation package. It also provides annotations to specify metadata for the components that are declared.
Annotation Type WebServlet:
Java
public @interface WebServlet
- Available in javax.servlet.annotation package.
- Used to declare a Servlet.
- At the time of deployment, the servlet container will identify and process the annotation and makes the corresponding servlet available at the specified URL patterns.
Elements of @WebServlet Annotation:
Name
| Modifier and Type
| Description
| Default value
|
---|
asyncSupported | boolean | To specify whether the servlet supports asynchronous mode or not. | false |
description | String | To provide a description of the servlet. | "" |
displayName | String | To provide the Display name of the Servlet. | "" |
initParams | WebInitParam[] | To specify initialization parameters of the servlet. | {} |
name | String | To provide the name of the servlet. | "" |
value | String[] | To specify the URL pattern of the servlet that is to be mapped. | {} |
urlPatterns | String[] | To provide the URL patterns of the servlet that are to be mapped. | {} |
smallIcon | String | To specify the small icon name of the servlet. | "" |
loadOnStartup | int | To provide the load on the startup order of the servlet. | -1 |
largeIcon | String | To specify the large icon name of the servlet. | "" |
The elements displayName, description, smallIcon and largeIcon are basically used by IDEs, tools or servlet containers. These do not affect the execution of the servlet.
Servlet with Annotation Examples
For better understanding, we will create a simple HTML page to map the Servlet with the URL.
Example 1:
Servlet annotated with only URL pattern:
index.html
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Home</title>
</head>
<body>
<form action="hello" method="post">
Welcome Page: <input type="submit" />
</form>
</body>
</html>
Html page which maps the servlet with URL "/hello".
HelloServlet.java
Java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// set the response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Print hello message to the client browser in
// response object
out.println(
"<h3>Hello, Welcome to GeeksforGeeks!!</h3>");
out.close();
}
}
- When user clicks submit for the welcome page, container will process the "@WebServlet("/hello")" annotation and maps the "HelloServlet" class.
- As the method is mentioned as "post" in Html page, container will execute "doPost()" method in "HelloServlet" class.
Output:
- Run the project on the server to get the output.
- URL: http://localhost:8081/ServletFlow/index.html

You can see the URL mapping to the "HelloServlet" class and the output.
Example 2:
Servlet annotated with servlet information:
HelloServlet.java
Java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "Hello Servlet",
displayName = "Annotated Hello Servlet",
description
= "This is annotated servlet example.",
value = "/hello")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// set the response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Print hello message to the client browser in
// response object
out.println(
"<h3>Hello, Welcome to GeeksforGeeks!!</h3>");
out.println(
"<h4>Annotated servlet with elements - name, displayName, description and value</h4>");
out.close();
}
}
- To include the name of the servlet and any description related to the servlet, we can use annotated elements as shown above.
- The URL mapping can be specified using value element.
Output:
- Run the project and click on submit.
Example 3:
Servlet annotated with Initialization parameters:
HelloServlet.java
Java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(
value = "/hello",
initParams
= { @WebInitParam(name = "name", value = "Geek")
, })
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// Get the initialized parameter value
String name = getInitParameter("name");
// set the response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Print hello message to the client browser in
// response object
out.println("<h3>Hello " + name
+ ", Welcome to GeeksforGeeks!!</h3>");
out.println(
"<h4>Annotated servlet with Initialization parameter.</h4>");
out.close();
}
}
- Here, we are specifying the parameter values using @WebInitParam annotation. We need to provide the parameter name which we want to initialize and the value to be set.
- While Servlet Initialization, container will process the @WebInitParam annotation inside the @WebServlet annotation and initializes the specified values.
- So, we are initializing the parameter "name" to value "Geek" and the same will written to the output in the response.
Output:
- Run the project and click on submit.
Example 4:
Servlet annotated with load-on-start up value and asynchronous support:
HelloServlet.java
Java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(value = "/hello", loadOnStartup = 1,
asyncSupported = true)
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(ServletConfig config)
{
System.out.println(
"Hello Servlet has been initialized");
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// set the response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Print hello message to the client browser in
// response object
out.println(
"<h3>Hello, Welcome to GeeksforGeeks!!</h3>");
out.println(
"<h4>Annotated servlet with load-on-start up value and asynchronous support.</h4>");
out.close();
}
}
- Generally, when the first request comes from the client, then servlet container will identify the corresponding servlet and it will load, instantiate and initialize the servlet.
- So, the response time for the first request to client is more when compared to the next client requests.
- If we specify the Load-on-startup value as 1, at the time of servlet deployment into the server itself, container will load, instantiate and initialize the servlet when the server is started.
- To specify this servlet can support asynchronous mode, set the element asyncSupported value as true.
Output:
- Run the project on the server.
- You can see the servlet is loaded, instantiated(init() method) and Initialized at the time of servlet deployment into the server.

- You can see the initialization message in the console at the time of server start and the servlet deployment.
- And the response will be generated in the browser as below.
Example 5:
Servlet annotated with multiple URL patterns:
index.html
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Home</title>
</head>
<body>
<form action="hello" method="post">
Click here for Welcome Page(using /hello URL): <input type="submit" />
</form>
<form action="welcome" method="get">
Click here for Welcome Page(using /welcome URL): <input type="submit" />
</form>
</body>
</html>
Include two form pages with different URL mapping.
HelloServlet.java
Java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = { "/welcome", "/hello" })
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// set the response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Print hello message to the client browser in
// response object
out.println(
"<h3>Hello, Welcome to GeeksforGeeks!!</h3>");
out.println(
"<h4>Annotated servlet with multiple URLs inside Get method.</h4>");
out.close();
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// set the response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Print hello message to the client browser in
// response object
out.println(
"<h3>Hello, Welcome to GeeksforGeeks!!</h3>");
out.println(
"<h4>Annotated servlet with multiple URLs inside Post method.</h4>");
out.close();
}
}
- When the URL request comes to the servlet, whether it is "/hello" or "/welcome", both will be mapped to the same servlet.
- As specified in the HTML form, "/hello" action is with method "/post". so, container will execute "doPost()" method in the servlet and  "/welcome" action is with method "/get". so, container will execute "doGet()" method in the servlet.
Output:

- When click on "/hello" submit button, container will execute "doPost()" method in the "HelloServlet" and below output will be generated with that URL.

- When click on "/welcome" submit button, container will execute "doGet()" method in the "HelloServlet" and below output will be generated with that URL.

- You can see the difference between the URL based on the action which we are calling the corresponding servlet.
- As we included multiple URLs in the Servlet, the container is able to map the request coming from both "/hello" and "/welcome" to the "HelloServlet" and generate the response.
Conclusion
This way we can use different annotations available in javax.servlet.annotation package to declare and set the metadata of the Java Servlets inside the servlet itself instead of using web.xml file based on our project requirement.
Similar Reads
Spring @Value Annotation with Example
The @Value annotation in Spring is one of the most important annotations. It is used to assign default values to variables and method arguments. It allows us to inject values from spring environment variables, system variables, and properties files. It also supports Spring Expression Language (SpEL)
6 min read
Servlet - Web Application
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 Working With Servlets Working with Servlets is an impor
8 min read
Servlet - Internationalization with Examples
By default, web pages are available in the English language. It can be provided in the user choice of languages by means of the "Internationalization" concept in Java technology. Internationalization (i18n) helps the users to view the pages according to their nationality or else visited location. Re
5 min read
Servlet - Write Data into PDF
A Servlet is an object that accepts a request and responds to it with a response. The basic Servlet package contains Java objects that represent servlet requests and responses, as well as configuration and execution environment information. Servlets may react to any form of request, although they ar
3 min read
Scala | Annotation
Scala Annotations are metadata added to the program source code. Annotations are allowed on any kind of definition or declaration including vals, vars, classes, objects, traits, defs and types. Annotations are used to associate meta-information with definitions. Syntax: @annot(exp_{1}, exp_{2}, ...)
3 min read
Spring @Bean Annotation with Example
The @Bean annotation in Spring is a powerful way to define and manage beans in a Spring application. Unlike @Component, which relies on class-level scanning, @Bean explicitly declares beans inside @Configuration classes, offering greater flexibility in object creation. In this article, we will explo
9 min read
Customize Java Annotation with Examples
Java annotations are a mechanism for adding metadata information to our source code (Program). They are a powerful part of Java that was added to JDK5. Annotations provide an alternative to the use of XML descriptors. Also, we are able to attach them to packages, classes, interfaces, methods, and fi
3 min read
Spring Core Annotations
Spring Annotations are a form of metadata that provides data about a program. Annotations are used to provide supplemental information about a program. It does not have a direct effect on the operation of the code they annotate. It does not change the action of the compiled program.Spring Framework
5 min read
Spring - Required Annotation
Consider a scenario where a developer wants to make some of the fields as mandatory fields. using the Spring framework, a developer can use the @Required annotation to those fields by pushing the responsibility for such checking onto the container. So container must check whether those fields are be
7 min read
Servlet With JDBC
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. Â Properties of Servlets are as follows: Servlets work
12 min read