Three Ways to Create Servlets in Java

Approach 1: Implementing the Servlet Interface

The most fundamental approach involves directly implementing the Servlet interface. This requires implementing all methods defined in the interface, including init(), service(), destroy(), and getServletConfig().

 1 package com.example.web;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.Servlet;
 6 import javax.servlet.ServletConfig;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.ServletRequest;
 9 import javax.servlet.ServletResponse;
10 
11 public class LoginServlet implements Servlet {
12 
13     @Override
14     public void destroy() {
15         System.out.println("Servlet instance destroyed");
16     }
17     
18     @Override
19     public void init(ServletConfig config) throws ServletException {
20         System.out.println("Servlet initialized");
21     }
22 
23     @Override
24     public void service(ServletRequest request, ServletResponse response) 
25             throws ServletException, IOException {
26         response.getWriter().write("Service method executed");
27     }
28 
29     @Override
30     public ServletConfig getServletConfig() {
31         return null;
32     }
33 
34     @Override
35     public String getServletInfo() {
36         return "Login Servlet v1.0";
37     }
38 }

Approach 2: Extending GenericServlet Abstract Class

GenericServlet provides a generic, protocol-independent implementation of the Servlet interface. The key advantage is that it implements all lifecycle methods except service(), which remains the only abstract method you must implement.

 1 package com.example.web;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.GenericServlet;
 6 import javax.servlet.ServletException;
 7 import javax.servlet.ServletRequest;
 8 import javax.servlet.ServletResponse;
 9 
10 public class AuthServlet extends GenericServlet {
11 
12     @Override
13     public void service(ServletRequest request, ServletResponse response) 
14             throws ServletException, IOException {
15         response.setContentType("text/html");
16         response.getWriter().write("<p>Request processed</p>");
17     }
18 }

Approach 3: Extending HttpServlet Abstract Class

For HTTP-based applications, HttpServlet is the most commonly used approach. It extends GenericServlet and provides methods like doGet() and doPost() to handle specific HTTP request types, eliminating the need to parse the request method manually.

 1 package com.example.web;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import java.io.IOException;
 8 import java.io.PrintWriter;
 9 
10 public class UserServlet extends HttpServlet {
11 
12     @Override
13     protected void doGet(HttpServletRequest request, HttpServletResponse response) 
14             throws ServletException, IOException {
15         response.setContentType("text/plain");
16         PrintWriter out = response.getWriter();
17         out.println("GET request received");
18     }
19     
20     @Override
21     protected void doPost(HttpServletRequest request, HttpServletResponse response) 
22             throws ServletException, IOException {
23         response.setContentType("text/plain");
24         PrintWriter out = response.getWriter();
25         out.println("POST request received");
26     }
27 }

Deployment Configuration

To make your servlets accessible via URLs, you must configure them in the web.xml deployment descriptor:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
 5                              http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 6          version="3.1">
 7 
 8     <servlet>
 9         <servlet-name>loginServlet</servlet-name>
10         <servlet-class>com.example.web.LoginServlet</servlet-class>
11     </servlet>
12 
13     <servlet-mapping>
14         <servlet-name>loginServlet</servlet-name>
15         <url-pattern>/login</url-pattern>
16     </servlet-mapping>
17 
18     <servlet>
19         <servlet-name>authServlet</servlet-name>
20         <servlet-class>com.example.web.AuthServlet</servlet-class>
21     </servlet>
22 
23     <servlet-mapping>
24         <servlet-name>authServlet</servlet-name>
25         <url-pattern>/auth</url-pattern>
26     </servlet-mapping>
27 
28     <servlet>
29         <servlet-name>userServlet</servlet-name>
30         <servlet-class>com.example.web.UserServlet</servlet-class>
31     </servlet>
32 
33     <servlet-mapping>
34         <servlet-name>userServlet</servlet-name>
35         <url-pattern>/user</url-pattern>
36     </servlet-mapping>
37 
38 </web-app>

Tags: java servlet httpservlet genericservlet javax.servlet

Posted on Thu, 21 May 2026 16:59:49 +0000 by madmega