Servlet - eliizquierdo/material_programacion_avanzada2026 GitHub Wiki
¿Qué son los Servlets?
Servlets son clases Java que extienden las capacidades de los servidores web. Procesan peticiones HTTP y generan respuestas dinámicas. Son el Controlador en el patrón MVC.
Características principales:
- Ejecutan en el servidor web (contenedor de servlets)
- Manejan peticiones HTTP (GET, POST, PUT, DELETE)
- Gestionan el ciclo de vida de las peticiones web
- Actúan como intermediarios entre la vista (JSP) y el modelo (DAO/VO)
Estructura básica de un Servlet
1. Declaración y anotaciones
@WebServlet("/ruta")
public class MiServlet extends HttpServlet {
// código del servlet
}
Elementos clave:
@WebServlet("/persona"): Define la URL que atiende el servletextends HttpServlet: Hereda funcionalidades HTTP básicas- Sin
@WebServletnecesitas configurar enweb.xml
2. Métodos principales
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Manejar peticiones GET
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Manejar peticiones POST
}
¿Cuándo usar cada uno?
- doGet: Mostrar datos, formularios, navegación
- doPost: Procesar formularios, crear/actualizar/eliminar datos
Objetos fundamentales
HttpServletRequest
// Obtener parámetros
String action = request.getParameter("action");
String nombre = request.getParameter("nombre");
int codigo = Integer.parseInt(request.getParameter("codigo"));
// Configurar encoding
request.setCharacterEncoding("UTF-8");
// Manejar atributos
request.setAttribute("personas", listaPersonas);
Object obj = request.getAttribute("persona");
// Información de la app
String contextPath = request.getContextPath();
HttpServletResponse
El objeto response permite al servlet controlar la respuesta HTTP que se envía de vuelta al navegador.
Redirecciones (sendRedirect)
response.sendRedirect(request.getContextPath() + "/persona");
¿Qué hace exactamente?
- Envía al navegador un código de estado HTTP 302 (redirección temporal)
- El navegador recibe la respuesta y automáticamente hace una nueva petición a la URL especificada
- Es una nueva petición HTTP completa - la URL en el navegador cambia
- Se pierden todos los atributos del request anterior
- Usado en PRG: después de procesar un POST, redirigir a un GET (ver Patrón PRG)
Cuándo usar:
- Después de operaciones POST (crear, actualizar, eliminar)
- Cuando quieres que la URL del navegador cambie
- Para evitar reenvío de formularios
Headers HTTP
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
¿Para qué sirven?
setContentType(): Le dice al navegador qué tipo de contenido está recibiendosetCharacterEncoding(): Define la codificación de caracteres (importante para acentos y ñ)- Se configuran antes de escribir contenido en la respuesta
- Generalmente no los usamos mucho porque los JSP los manejan automáticamente
RequestDispatcher
El RequestDispatcher permite transferir el control a otro recurso dentro de la misma aplicación.
Forward a JSP
request.getRequestDispatcher("/WEB-INF/vista/persona-lista.jsp")
.forward(request, response);
¿Qué hace exactamente?
- No envía respuesta al navegador todavía
- Transfiere el control internamente al JSP especificado
- El JSP genera el HTML y lo envía al navegador
- La URL del navegador NO cambia (sigue mostrando la URL del servlet)
- Los atributos del request se mantienen (por eso funcionan los
request.setAttribute()) - Es más rápido que redirect porque no hay nueva petición HTTP
Cuándo usar:
- Para mostrar vistas después de operaciones GET
- Cuando necesitas pasar datos del servlet al JSP
- Cuando NO quieres que cambie la URL del navegador
Diferencia clave: Forward vs Redirect
| Aspecto | Forward | Redirect |
|---|---|---|
| Peticiones HTTP | 1 petición | 2 peticiones |
| URL del navegador | No cambia | Cambia |
| Atributos del request | Se mantienen | Se pierden |
| Velocidad | Más rápido | Más lento |
| Alcance | Solo dentro de la app | Puede ir a cualquier URL |
| Uso típico | Mostrar vistas (GET) | Después de procesar (POST) |
📋 Palabras clave
Servlet · HttpServlet · @WebServlet · doGet · doPost · HttpServletRequest · HttpServletResponse · getParameter · setAttribute · forward · sendRedirect · init · service · destroy · ciclo de vida · Controlador MVC