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
}