En el mundo de la programación web, uno de los conceptos fundamentales es el de servlet, una herramienta esencial para el desarrollo de aplicaciones dinámicas en Java. Este artículo aborda de forma exhaustiva qué es un servlet, cómo funciona y cuál es su importancia en la arquitectura de aplicaciones web modernas. A lo largo de las siguientes secciones, exploraremos su definición, funcionamiento, ejemplos prácticos, diferencias con otros componentes y mucho más.
¿Qué es un servlet en informática?
Un servlet es un componente Java que se ejecuta en un servidor web para procesar solicitudes HTTP y generar respuestas dinámicas. En esencia, actúa como un intermediario entre el cliente (navegador) y el servidor, permitiendo a los desarrolladores crear contenido web dinámico, como páginas personalizadas, formularios de registro, sistemas de autenticación y mucho más.
Su principal función es recibir solicitudes, procesarlas y devolver una respuesta al cliente. A diferencia de las páginas estáticas, que simplemente se envían al navegador, los servlets permiten ejecutar código del lado del servidor, lo que abre un abanico de posibilidades para el desarrollo web.
Historia y evolución
La primera implementación de servlets apareció en 1997, impulsada por la necesidad de crear aplicaciones web dinámicas en un entorno Java. Inicialmente, se usaban para generar HTML desde el servidor, pero con el tiempo se convirtieron en la base para frameworks más complejos, como JavaServer Pages (JSP) y JavaServer Faces (JSF).
El estándar de servlets se define bajo el Java Servlet API, un conjunto de interfaces y clases que forman parte del Java EE (Enterprise Edition). Este API se ha mantenido relativamente estable a lo largo del tiempo, aunque ha evolucionado para soportar nuevas características, como el manejo de solicitudes AJAX, WebSocket y el uso de anotaciones en lugar de archivos de configuración XML.
Cómo funciona un servlet
El funcionamiento de un servlet se basa en el modelo de solicitud-respuesta. Cuando un usuario accede a una URL asociada a un servlet, el servidor web (como Apache Tomcat o Jetty) invoca al servlet y le pasa la solicitud HTTP. El servlet, a su vez, procesa la solicitud y genera una respuesta, que se envía de vuelta al cliente.
Este proceso se puede resumir en los siguientes pasos:
- Solicitud HTTP: El cliente (navegador) envía una solicitud al servidor web.
- Ruta mapeada: El servidor web identifica qué servlet manejará la solicitud según la configuración definida en el archivo `web.xml` o mediante anotaciones.
- Ejecución del servlet: El servlet recibe la solicitud, accede a bases de datos, realiza cálculos, o cualquier lógica necesaria.
- Respuesta HTTP: El servlet genera una respuesta, normalmente en formato HTML, que se envía al cliente.
Un aspecto importante es que los servlets son instanciados una sola vez por cada tipo, y luego se utilizan para manejar múltiples solicitudes. Esto mejora el rendimiento, ya que no se crea un nuevo objeto para cada petición, sino que se reutiliza el mismo.
Servlets vs. CGI
Una diferencia clave entre los servlets y el antiguo modelo de Common Gateway Interface (CGI) es la eficiencia. En el modelo CGI, cada solicitud HTTP crea un nuevo proceso, lo que consume muchos recursos del servidor. En cambio, los servlets se ejecutan dentro del proceso del servidor web, lo que reduce el tiempo de respuesta y el uso de memoria.
Además, los servlets pueden mantener estado entre solicitudes, mientras que en CGI cada petición es independiente. Esta capacidad de mantener contexto (por ejemplo, sesiones de usuario) es fundamental para aplicaciones web modernas.
Ejemplos de servlets
Un ejemplo clásico de servlet es un formulario de registro. El servlet recibe los datos del usuario, valida su estructura, consulta la base de datos para verificar si el nombre de usuario ya existe, y devuelve una página HTML con un mensaje de éxito o error.
Aquí tienes un ejemplo básico de un servlet en Java:
«`java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HolaMundoServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType(text/html);
PrintWriter out = response.getWriter();
out.println();
out.println(
Hola Mundo desde un Servlet
);
out.println();
}
}
«`
Este código define un servlet que, cuando se accede a su URL, responde con una página HTML sencilla. Para usarlo, se debe configurar en el `web.xml` o con anotaciones como `@WebServlet`.
El ciclo de vida de un servlet
El ciclo de vida de un servlet está definido por tres métodos principales:
- init(): Se ejecuta una sola vez cuando el servlet es inicializado. Ideal para cargar recursos como conexiones a bases de datos.
- service(): Se llama cada vez que el servlet recibe una solicitud. Este método llama a `doGet()`, `doPost()`, etc., según el tipo de solicitud.
- destroy(): Se ejecuta cuando el servlet se desactiva, normalmente al reiniciar el servidor. Se usa para liberar recursos.
Este ciclo permite que los servlets sean eficientes y escalables, ya que se inicializan una vez y se reutilizan para múltiples solicitudes.
Servlets en frameworks populares
Muchos frameworks modernos basan su funcionamiento en servlets. Por ejemplo:
- Spring MVC: Utiliza servlets internamente para manejar peticiones HTTP.
- Struts: Un framework de presentación que se apoya en servlets para la lógica de control.
- JavaServer Pages (JSP): Las páginas JSP se traducen automáticamente en servlets por el servidor.
Estos frameworks encapsulan la complejidad de los servlets, permitiendo a los desarrolladores enfocarse en la lógica de negocio en lugar de en la gestión de solicitudes HTTP.
Servlets y el servidor web
Los servlets no se ejecutan solos; necesitan un contenedor de servlets, que es un componente del servidor web. Los contenedores más populares incluyen:
- Apache Tomcat
- Jetty
- Glassfish
- JBoss
El contenedor se encarga de:
- Cargar y ejecutar los servlets.
- Manejar las solicitudes HTTP.
- Gestionar las sesiones de usuario.
- Proveer seguridad y configuración.
El contenedor también interpreta el archivo `web.xml` (o anotaciones en Java) para mapear URLs a servlets específicos.
¿Para qué sirve un servlet?
Un servlet sirve para:
- Procesar formularios web.
- Generar contenido dinámico en respuesta a solicitudes HTTP.
- Manejar sesiones de usuario.
- Integrarse con bases de datos.
- Crear APIs RESTful (con el uso de anotaciones como `@GET` o `@POST`).
Por ejemplo, un servlet puede recibir una solicitud de inicio de sesión, validar las credenciales contra una base de datos y devolver una página de bienvenida si el usuario es autenticado.
Servlets vs. JSP
Aunque ambos se usan para generar contenido web dinámico, servlets y JSP (JavaServer Pages) tienen diferencias clave:
- Servlets: Escritos en Java, son más adecuados para lógica compleja y reutilizable.
- JSP: Escritos en HTML con fragmentos de código Java, son ideales para generar contenido visual.
En la práctica, se suele usar una arquitectura MVC, donde los servlets actúan como controladores y las JSP como vistas. Esto separa la lógica de presentación de la lógica de negocio.
Configuración de un servlet
Para que un servlet funcione, debe estar correctamente configurado en el servidor web. Esto puede hacerse de dos maneras:
- Archivo `web.xml`: Se define el servlet y su URL de mapeo.
«`xml
«`
- Anotaciones en Java: Desde Java EE 6, se pueden usar anotaciones como `@WebServlet`.
«`java
@WebServlet(/hola)
public class HolaMundoServlet extends HttpServlet { … }
«`
Ambos métodos son válidos, aunque las anotaciones ofrecen una sintaxis más limpia y directa.
¿Cómo se crea un servlet?
Crear un servlet implica los siguientes pasos:
- Escribir la clase servlet: Heredar de `HttpServlet` y sobrescribir métodos como `doGet()` o `doPost()`.
- Compilar la clase: Usando el compilador de Java.
- Empaquetar en WAR: Juntar todas las clases y recursos en un archivo WAR (Web Archive).
- Desplegar en el servidor: Copiar el archivo WAR al directorio de despliegue del servidor (como `webapps` en Tomcat).
- Acceder a la URL: Navegar al URL asociado al servlet.
Este proceso es estándar para cualquier servidor Java EE, aunque los pasos exactos pueden variar según el entorno.
¿Qué significa el término servlet?
El término servlet proviene del latín y significa pequeño sirviente o asistente. En el contexto de la programación, se refiere a un componente que actúa como un asistente del servidor para manejar solicitudes HTTP. Su nombre refleja su papel: un pequeño programa que ejecuta tareas específicas bajo demanda.
En el desarrollo web, los servlets son una extensión de las capacidades del servidor, permitiendo que responda de manera dinámica a las solicitudes de los usuarios, algo que no sería posible con contenido estático.
Servlets en la arquitectura web
En la arquitectura de aplicaciones web, los servlets suelen ocupar la capa de controladores en un modelo MVC (Modelo-Vista-Controlador). El controlador (servlet) recibe la solicitud, decide qué modelo usar (lógica de negocio) y selecciona qué vista mostrar (página HTML).
Esta separación permite una mejor organización del código, facilitando el mantenimiento y la escalabilidad. Los servlets también pueden integrarse con otros componentes, como beans de sesión, DAOs (Data Access Objects) y servicios RESTful, para construir aplicaciones complejas.
¿Cómo se manejan las sesiones en servlets?
Las sesiones en servlets se manejan mediante el objeto `HttpSession`, que permite almacenar información entre solicitudes. Para crear una sesión, se usa:
«`java
HttpSession session = request.getSession();
session.setAttribute(usuario, usuario);
«`
Y para recuperarla:
«`java
Usuario usuario = (Usuario) session.getAttribute(usuario);
«`
Las sesiones son útiles para mantener el estado del usuario, como su identidad, preferencias o carrito de compras. También es posible configurar el tiempo de vida de una sesión, lo que permite controlar cuánto tiempo puede estar inactivo un usuario antes de que se cierre la sesión.
Cómo usar servlets en Java
Para usar servlets en Java, es necesario seguir estos pasos:
- Crear un proyecto Java web (con IDE como Eclipse o IntelliJ).
- Escribir la clase servlet extendiendo `HttpServlet`.
- Configurar el archivo `web.xml` o usar anotaciones.
- Compilar el proyecto y generar un archivo WAR.
- Desplegar en un servidor web como Tomcat.
- Acceder a la URL asociada al servlet.
Un ejemplo práctico es crear un servlet que muestre la hora actual:
«`java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(text/html);
PrintWriter out = response.getWriter();
out.println();
out.println(
Hora actual: + new Date() +
);
out.println();
}
«`
Este servlet se puede acceder desde un navegador, mostrando siempre la hora del servidor.
Servlets y seguridad
Los servlets pueden integrarse con mecanismos de seguridad para proteger las aplicaciones web. Algunas de las funcionalidades incluyen:
- Autenticación: Verificar las credenciales del usuario.
- Autorización: Controlar qué recursos puede acceder un usuario.
- Filtros: Interceptar solicitudes para aplicar reglas de seguridad o registro.
Estas funcionalidades se pueden implementar usando el Java Authentication and Authorization Service (JAAS) o mediante filtros de servlet que se ejecutan antes o después del servlet principal.
Servlets en el desarrollo de APIs REST
Los servlets también son utilizados para construir APIs RESTful. Aunque frameworks como Spring Boot o Jersey ofrecen abstracciones más simples, los servlets forman la base de estas APIs. Con anotaciones como `@GET`, `@POST`, `@Path`, etc., se pueden definir endpoints REST directamente en servlets.
Un ejemplo básico de un endpoint GET:
«`java
@WebServlet(/usuario)
public class UsuarioServlet extends HttpServlet {
@GET
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType(application/json);
PrintWriter out = response.getWriter();
out.println({\nombre\: \Juan\, \edad\: 25});
}
}
«`
Este tipo de servlet responde con datos en formato JSON, ideal para APIs consumidas por aplicaciones móviles o frontend.
Miguel es un entrenador de perros certificado y conductista animal. Se especializa en el refuerzo positivo y en solucionar problemas de comportamiento comunes, ayudando a los dueños a construir un vínculo más fuerte con sus mascotas.
INDICE

