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.

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í)

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

  • El contenido fuera de WEB-INF se sirve como archivos estáticos (HTML, CSS, JS).
  • WEB-INF no es accesible por HTTP: contiene código y configuración.
  • La aplicación se empaqueta como .war y se despliega en Tomcat.

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.

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.

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.
  • clase/daw/si/2eval/tomcat.txt
  • Última modificación: 2026/10/12 13:03
  • por cesguiro