Aprender Servlets te ayudará a entender cómo funciona internamente un servidor web Java y por qué frameworks como Micronaut, Spring Boot o Jakarta EE funcionan como lo hacen.
Temas relacionados
Cómo crear una API REST con Java Servlets
Crear un archetype web con maven y java
Antes de hablar de Servlets...
Imagina que un usuario escribe en su navegador:
Lo primero que ocurre NO es que Java ejecute código.
Sucede esto:
Cliente (Navegador)
│
│ HTTP Request
▼
Servidor Web (Tomcat)
│
▼
Contenedor de Servlets
│
▼
Servlet Java
│
▼
Respuesta HTTP
│
▼
Cliente
El Servlet es solamente una pieza del proceso.
¿Qué es un Servlet?
Un Servlet es una clase Java que se ejecuta en el servidor y permite manejar solicitudes HTTP dentro de un contenedor web como Apache Tomcat.
En términos prácticos:
- Es el equivalente backend de un endpoint HTTP
- Procesa requests (GET, POST, etc.)
- Devuelve responses (HTML, JSON, etc.)
Forma parte de la especificación Jakarta Servlet (antes Javax Servlet)
Puedes revisar documentación en:
- https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0 documetación oficial
- https://www.ibm.com/docs/es/was/9.0.5?topic=applications-servlets
- https://www.arquitecturajava.com/que-es-un-servlet/
- https://www.godaddy.com/resources/latam/desarrollo/servlet-java-que-es-como-funciona
Arquitectura básica
Flujo típico:
Cliente (Browser / Postman)
↓ HTTP Request
Servidor (Tomcat)
↓
Servlet
↓
Respuesta HTTP (HTML / JSON)
Servlet Container (Tomcat)
Es el entorno de ejecución encargado de gestionar el ciclo de vida de los Servlets y manejar la comunicación entre el servidor web y las clases Java.
Responsabilidades principales:
- Cargar y gestionar Servlets (
init,service,destroy) - Convertir solicitudes HTTP en objetos Java (
HttpServletRequest) - Enviar respuestas HTTP (
HttpServletResponse) - Manejar concurrencia (threads por request)
- Gestionar sesiones (
HttpSession) - Aplicar seguridad y configuraciones
En resumen: Es el motor que ejecuta Servlets y traduce HTTP ↔ Java
HttpServlet
HttpServlet es una clase abstracta que extiende GenericServlet y está diseñada específicamente para trabajar con el protocolo HTTP.
- Forma parte de: Jakarta Servlet
- Define métodos para manejar diferentes tipos de solicitudes HTTP.
- Métodos clave:
- protected void doGet(...)
- protected void doPost(...)
- protected void doPut(...)
- protected void doDelete(...)
HttpServletRequest
HttpServletRequest es un objeto que representa la solicitud HTTP que envía el cliente.
Contiene:
- Parámetros (?id=1)
- Headers (User-Agent, Authorization)
- Método HTTP (GET, POST…)
- Body de la petición
- Información de sesión
- Métodos importantes:
- request.getParameter("nombre");
- request.getHeader("Authorization");
- request.getMethod();
- request.getInputStream();
- request.getSession();
HttpServletResponse
HttpServletResponse es un objeto que representa la respuesta HTTP que el servidor enviará al cliente.
- Permite:
- Definir el contenido (HTML, JSON, etc.)
- Configurar headers
- Definir códigos de estado (200, 404, 500)
- Escribir el body de la respuesta
- Métodos importantes:
- response.setContentType("application/json");
- response.setStatus(200);
- response.getWriter().write("respuesta");
- Ejemplo:
- response.setContentType("text/html");
- response.getWriter().println("<h1>Hola</h1>");
Ciclo de vida de un Servlet
Revisando ña documentacion: https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0#servlet-life-cycle
Fases del ciclo de vida, Un servlet tiene 3 fases:
init()
Se ejecuta una sola vez al cargar
service()
Se ejecuta por cada request
Internamente delega en:
doGet()doPost()doPut()doDelete()
destroy()
Cuando el servidor lo elimina
Familias de Servlets
Existen dos familias de Servlets:
| Tomcat | API Servlet | Paquete Java |
|---|---|---|
| Tomcat 9 | Servlet 4 | javax.servlet.* |
| Tomcat 10.0 / 10.1 / 11 | Jakarta Servlet 5/6 | jakarta.servlet.* |
¿Por qué antes era Java EE?
Hasta 2017, la plataforma pertenecía a Oracle y se llamaba Java EE.
Posteriormente fue transferida a la Eclipse Foundation y cambió de nombre a Jakarta EE.
Lo más importante es que también cambió el paquete de las clases.
Antes:
import javax.servlet.http.HttpServlet;
Ahora:
import jakarta.servlet.http.HttpServlet;
Ese cambio es la causa de muchos errores de compatibilidad.
Diferencia entre javax y jakarta
Java EE (antiguo)
import javax.servlet.*;
Servidor compatible:
- Tomcat 9
- Java EE 8
Jakarta EE (nuevo)
import jakarta.servlet.*;
Servidor compatible:
- Tomcat 10
- Tomcat 11
- Jakarta EE 9+
- Jakarta EE 10
En resumen
- Servlet es una tecnología específica para manejar solicitudes y respuestas HTTP.
- Jakarta EE es una plataforma completa que incluye Servlets junto con muchas otras especificaciones para aplicaciones empresariales.
- El cambio de
javax.*ajakarta.*marcó la transición de Java EE a Jakarta EE y requiere usar versiones compatibles del servidor (por ejemplo, Tomcat 10 o 11 parajakarta.servlet).