Skip to content

Servlet

Elizabeth Izquierdo edited this page Aug 19, 2026 · 5 revisions

¿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 servlet
  • extends HttpServlet: Hereda funcionalidades HTTP básicas
  • Sin @WebServlet necesitas configurar en web.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á recibiendo
  • setCharacterEncoding(): 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


🧠 Autoevaluación — Servlets


← Archivos JSP · 🏠 Inicio · Mi primer formulario →

Clone this wiki locally