Tabla de Contenidos

06 - Tomcat

Tomcat es un contenedor de servlets: gestiona el ciclo de vida de los servlets y filtros, atiende las conexiones y reparte cada petición en un hilo de su pool. Es la versión “de verdad” del servidor que se construyó en los temas anteriores.

1. Qué hace

Capa Cómo la resuelve Tomcat
Sockets y protocolo HTTP Conector HTTP en un puerto (por defecto 8080)
Concurrencia Pool de hilos worker (http-nio-8080-exec-N)
Enrutado Cada ruta (@WebServlet, @WebFilter) a su componente
Ciclo de vida init/destroy de servlets y filtros
Recursos Archivos estáticos, errores HTTP, sesiones (no se usan aquí)

2. Estructura de una webapp

miapp/
├── WEB-INF/
│   ├── web.xml            (configuración, opcional con anotaciones)
│   ├── classes/           (clases compiladas)
│   └── lib/               (JARs de dependencias)
├── index.html
└── ...

3. Anotaciones frente a web.xml

Las rutas se declaran con anotaciones:

@WebServlet("/books")
public class BookServlet extends HttpServlet { /* ... */ }

@WebFilter("/*")
public class TokenFilter implements Filter { /* ... */ }

O en web.xml con el mismo resultado:

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" version="6.0">
  <servlet>
    <servlet-name>bookServlet</servlet-name>
    <servlet-class>com.example.BookServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>bookServlet</servlet-name>
    <url-pattern>/books</url-pattern>
  </servlet-mapping>
</web-app>

La combinación habitual: anotaciones para lo simple, web.xml cuando la configuración cambia por entorno.

4. Pool de hilos

Cada petición la ejecuta un hilo del pool:

"execution" de una petición en Tomcat:

http-nio-8080-exec-1  ->  atiende petición A
http-nio-8080-exec-2  ->  atiende petición B (simultánea)
http-nio-8080-exec-1  ->  reutilizado para la petición C

Los hilos se reutilizan entre peticiones: cualquier ThreadLocal sin limpiar filtra datos a la siguiente petición, igual que en el servidor propio.

5. Dos modos de uso

Modo Descripción
Servidor independiente Se instala Tomcat y se despliega el .war en su carpeta webapps
Embebido La aplicación arranca Tomcat dentro de sí misma (así funciona Spring Boot)
Tomcat ejecuta exactamente el modelo de los temas anteriores: acepta conexiones, las reparte en hilos del pool y delega cada petición en un servlet a través de la cadena de filtros. Lo que cambia es quién escribe ese servidor: ya no tú, sino el contenedor.