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>