Java Servlets

Server-side Java components for web applications

🌐 What are Java Servlets?

Java Servlets are server-side components that handle HTTP requests and generate dynamic web content. They run in web containers and provide the foundation for building robust, scalable web applications.


// Simple Servlet Example
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, 
                        HttpServletResponse response) 
                        throws ServletException, IOException {
        
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        
        out.println("<html><body>");
        out.println("<h1>Hello from Servlet!</h1>");
        out.println("</body></html>");
    }
}
                                    

Output (in browser):

Hello from Servlet!

Key Servlet Concepts

🔄

Lifecycle

Init, service, destroy methods

public void init() { /* setup */ }
public void service() { /* handle */ }
public void destroy() { /* cleanup */ }
📨

HTTP Methods

Handle GET, POST, PUT, DELETE

protected void doGet() { /* GET */ }
protected void doPost() { /* POST */ }
📋

Request/Response

Handle HTTP requests and responses

HttpServletRequest request
HttpServletResponse response
🗂️

Sessions

Maintain user state across requests

HttpSession session = 
    request.getSession();

🔹 Servlet Lifecycle

Understanding the servlet lifecycle methods:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class LifecycleServlet extends HttpServlet {
    
    // Called once when servlet is first loaded
    public void init() throws ServletException {
        System.out.println("Servlet initialized");
        // Initialize resources, database connections, etc.
    }
    
    // Called for each HTTP request
    protected void doGet(HttpServletRequest request, 
                        HttpServletResponse response) 
                        throws ServletException, IOException {
        
        System.out.println("Handling GET request");
        
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        
        out.println("<html><body>");
        out.println("<h2>Servlet Lifecycle Demo</h2>");
        out.println("<p>Current time: " + new java.util.Date() + "</p>");
        out.println("</body></html>");
    }
    
    // Called for POST requests
    protected void doPost(HttpServletRequest request, 
                         HttpServletResponse response) 
                         throws ServletException, IOException {
        
        System.out.println("Handling POST request");
        doGet(request, response); // Delegate to doGet
    }
    
    // Called once when servlet is unloaded
    public void destroy() {
        System.out.println("Servlet destroyed");
        // Clean up resources
    }
}

🔹 Handling Form Data

Processing HTML form submissions with servlets:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class FormServlet extends HttpServlet {
    
    // Display the form
    protected void doGet(HttpServletRequest request, 
                        HttpServletResponse response) 
                        throws ServletException, IOException {
        
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        
        out.println("<html><body>");
        out.println("<h2>User Registration</h2>");
        out.println("<form method='post' action='FormServlet'>");
        out.println("Name: <input type='text' name='username'><br><br>");
        out.println("Email: <input type='email' name='email'><br><br>");
        out.println("Age: <input type='number' name='age'><br><br>");
        out.println("<input type='submit' value='Register'>");
        out.println("</form>");
        out.println("</body></html>");
    }
    
    // Process form submission
    protected void doPost(HttpServletRequest request, 
                         HttpServletResponse response) 
                         throws ServletException, IOException {
        
        // Get form parameters
        String username = request.getParameter("username");
        String email = request.getParameter("email");
        String ageStr = request.getParameter("age");
        
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        
        out.println("<html><body>");
        out.println("<h2>Registration Successful!</h2>");
        out.println("<p>Name: " + username + "</p>");
        out.println("<p>Email: " + email + "</p>");
        out.println("<p>Age: " + ageStr + "</p>");
        out.println("<a href='FormServlet'>Register Another User</a>");
        out.println("</body></html>");
        
        // Here you would typically save to database
        System.out.println("New user registered: " + username);
    }
}

🔹 Session Management

Maintaining user state across multiple requests:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SessionServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, 
                        HttpServletResponse response) 
                        throws ServletException, IOException {
        
        // Get or create session
        HttpSession session = request.getSession();
        
        // Get visit count from session
        Integer visitCount = (Integer) session.getAttribute("visitCount");
        if (visitCount == null) {
            visitCount = 1;
        } else {
            visitCount++;
        }
        
        // Store updated count in session
        session.setAttribute("visitCount", visitCount);
        session.setAttribute("lastVisit", new java.util.Date());
        
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        
        out.println("<html><body>");
        out.println("<h2>Session Demo</h2>");
        out.println("<p>Session ID: " + session.getId() + "</p>");
        out.println("<p>Visit Count: " + visitCount + "</p>");
        out.println("<p>Last Visit: " + session.getAttribute("lastVisit") + "</p>");
        out.println("<p><a href='SessionServlet'>Refresh Page</a></p>");
        out.println("<p><a href='SessionServlet?action=invalidate'>End Session</a></p>");
        out.println("</body></html>");
        
        // Check if user wants to invalidate session
        String action = request.getParameter("action");
        if ("invalidate".equals(action)) {
            session.invalidate();
            response.sendRedirect("SessionServlet");
        }
    }
}

🔹 Servlet Configuration (web.xml)

Configuring servlets in the deployment descriptor:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         version="4.0">
    
    <display-name>My Web Application</display-name>
    
    <!-- Servlet Declaration -->
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.example.HelloServlet</servlet-class>
        <init-param>
            <param-name>greeting</param-name>
            <param-value>Welcome to our site!</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <!-- Servlet Mapping -->
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>FormServlet</servlet-name>
        <servlet-class>com.example.FormServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>FormServlet</servlet-name>
        <url-pattern>/register</url-pattern>
    </servlet-mapping>
    
    <!-- Welcome File List -->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    
</web-app>

Alternative: Annotations (Servlet 3.0+)

@WebServlet(name = "HelloServlet", urlPatterns = {"/hello"})
public class HelloServlet extends HttpServlet {
    // Servlet code here
}

🧠 Test Your Knowledge

Which method is called first in the servlet lifecycle?