Open In App

Servlet with Annotation

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.




<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,






@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:






public @interface WebServlet

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




<!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




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();
    }
}

Output:

You can see the URL mapping to the “HelloServlet” class and the output.

Example 2:

Servlet annotated with servlet information:

HelloServlet.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();
    }
}

Output:

Example 3:

Servlet annotated with Initialization parameters:

HelloServlet.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();
    }
}

Output:

Example 4:

Servlet annotated with load-on-start up value and asynchronous support:

HelloServlet.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();
    }
}

Output:

Example 5:

Servlet annotated with multiple URL patterns:

index.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




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();
    }
}

Output:

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.


Article Tags :