Java Servlet Annotations Example
Communication between the Servlets is an important task to the programmer. In this tutorial, we will see how the Servlet annotations can replace the equivalent XML
configuration in the web deployment descriptor file (web.xml
).
1. Introduction
The Servlet API 3.0
introduces a new package called javax.servlet.annotation
which provides the annotation types which can be used for annotating a Servlet class. The annotations can replace the equivalent XML
configuration in the web deployment descriptor file (i.e. web.xml
) such as Servlet Declaration and Servlet Mapping. Servlet Containers will process the annotated classes at the time of application deployment.
The different types of annotations introduced in Servlet 3.0
are:
@HandlesTypes
@HttpConstraint
@HttpMethodConstraint
@MultipartConfig
@ServletSecurity
@WebFilter
@WebInitParam
@WebListener
@WebServlet
The @WebServlet
annotation is used for declaring a Servlet class (i.e. the Servlet class must extend from the HttpServlet
class) and configuring the mapping for it. Here are some examples of using the @WebServlet
annotation:
- The simplest way to declare a Servlet
Here the MyServlet
servlet is mapped to the /processForm
URL pattern. When accessing this servlet, it will return a Hello message.
@WebServlet("/processForm") public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter().println("Hello"); } }
- Declare a Servlet with additional information
Here the MyServlet
servlet is declared with additional information such as name and description.
@WebServlet( name = "MyServlet", description = " This is my first annotated servlet", urlPatterns = {"/processServlet"} ) public class MyServlet extends HttpServlet { // Servlet Code Here }
- Declare a Servlet with multiple URL patterns
Here the MyServlet
servlet is mapped to three different URL patterns i.e. /foo
, /bar
, and /cool
.
@WebServlet(urlPatterns = {"/foo", "/bar", "/cool"}) public class MyServlet extends HttpServlet { // Servlet Code Here }
- Declare a Servlet with some init parameters
Here we declare the ImageUploadServlet
mapped by the URL pattern: /imageUpload
and specify the two init parameters i.e. saveDir
and allowedTypes
. The Servlet’s doGet()
method retrieves the values of these parameters and prints them out to the client.
@WebServlet( urlPatterns = "/imageUpload", initParams = { @WebInitParam(name = "saveDir", value = "D:/FileUpload"), @WebInitParam(name = "allowedTypes", value = "jpg, jpeg, gif, png") } ) public class ImageUploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { String saveDir = getInitParameter("saveDir"), fileTypes = getInitParameter("allowedTypes"); PrintWriter writerObj = response.getWriter(); writerObj.println("saveDir?= " + saveDir); writerObj.println("fileTypes?= " + fileTypes); } }
- Declare a Servlet with asynchronous operation mode and load-on-startup order
Here we declare the servlet StartupServlet
with loadOnStartup = 1
. This means that this servlet is initialized automatically by the Servlet container when the server is being started (and the message in the init()
method will be printed). Here we will also specify whether the Servlet supports the Asynchronous Mode or not.
@WebServlet( urlPatterns = "/myController", loadOnStartup = 1, asyncSupported = true ) public class StartupServlet extends HttpServlet { public void init(ServletConfig config) { loggerObj.debug("My Servlet Has Been Initialized ….!"); } // Servlet Code Here }
2. Example of simple Servlet by Annotation
There is given the simple example of a Servlet class with annotations.
Simple.java
package com.jcg.servlet; 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("/Simple") public class Simple extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print("<html><body>"); out.print("<h3>Hello Servlet</h3>"); out.print("</body></html>"); } }
Now run the project on Tomcat7 and if everything goes right developers will get the following screen.
That’s all for this post. Happy Learning!!
3. Conclusion
In this section, developers learned how the Servlet annotations can replace the equivalent XML
configuration in the web deployment descriptor file. Developers can download the sample application as an Eclipse project in the Downloads section. I hope this article served you with whatever developers were looking for.
4. Download the Eclipse Project
This was an example of Servlet Annotations.
You can download the full source code of this example here: Servlet Annotation