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 └── ...
WEB-INF se sirve como archivos estáticos (HTML, CSS, JS).WEB-INF no es accesible por HTTP: contiene código y configuración..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) |