# Tomcat

Apache Tomcat (también llamado Jakarta Tomcat o simplemente Tomcat) funciona como un contenedor de servlets desarrollado bajo el proyecto Jakarta en la Apache Software Foundation. Tomcat implementa las especificaciones de los servlets y de JavaServer Pages (JSP) de Oracle Corporation (aunque creado por Sun Microsystems).

## Estado de su desarrollo

Tomcat es desarrollado y actualizado por miembros de la Apache Software Foundation y voluntarios independientes. Los usuarios disponen de libre acceso a su código fuente y a su forma binaria en los términos establecidos en la Apache Software License. Las primeras distribuciones de Tomcat fueron las versiones 3.0.x. A partir de la versión 4.0, Jakarta Tomcat utiliza el contenedor de servlets conocido como Catalina.
Las versiones más recientes son las 9.x, que implementan las especificaciones de Servlet 4.0 y de JSP 2.3.

## Tomcat Catalina

Catalina es el nombre del contenedor de servlets del Jakarta Tomcat desde la versión 4x. Fue desarrollado bajo el Proyecto Jakarta de la Apache Software Foundation. Tomcat implementa las especificaciones de Sun Microsystems para servlets y Java Server Pages (JSP), las cuales son importantes tecnologías web basadas en Java.
El contenedor de servlets de Tomcat fue rediseñado como Catalina en la versión 4x de Tomcat. El arquitecto de Catalina fue Craig McClanahan.
En un mensaje en la lista de usuarios de Tomcat, Craig McClanahan comentó por qué llamó Catalina al motor:
    Usar Catalina fue idea mía porque yo escribí la mayor parte del código original. Las razones son mundanas, pero aquí están:
   * Aunque no vivo en el Sur de California, siempre me gustó lo que he leído y visto sobre la Isla Catalina.
   * Uno de los pueblos de la isla es Avalon, y estuvimos (en el principio) considerando usar el Framework Avalon para la arquitectura interna. Hubiese sido una razón bonita, pero no sucedió de esa manera.
   * Cuando estoy escribiendo código, normalmente hay uno o más gatos sobre mis piernas que se dedican a poner espacios en blanco cuando piensan que no he puesto suficientes (no se necesitan dedos para pulsar la barra espaciadora :-). [N. del T.: Gato en inglés es Cat]

## Entorno

Tomcat es un contenedor web con soporte de servlets y JSPs. Tomcat no es un servidor de aplicaciones, como JBoss o JOnAS. Incluye el compilador Jasper, que compila JSPs convirtiéndolas en servlets. El motor de servlets de Tomcat a menudo se presenta en combinación con el servidor web Apache.
Tomcat puede funcionar como servidor web por sí mismo. En sus inicios existió la percepción de que el uso de Tomcat de forma autónoma era solo recomendable para entornos de desarrollo y entornos con requisitos mínimos de velocidad y gestión de transacciones. Hoy en día ya no existe esa percepción y Tomcat es usado como servidor web autónomo en entornos con alto nivel de tráfico y alta disponibilidad.
Dado que Tomcat fue escrito en Java, funciona en cualquier sistema operativo que disponga de la máquina virtual Java.

## Estructura de directorios

La jerarquía de directorios de instalación de Tomcat incluye:
* bin - arranque, cierre, y otros scripts y ejecutables.
* common - clases comunes que pueden utilizar Catalina y las aplicaciones web.
* conf - ficheros XML y los correspondientes DTD para la configuración de Tomcat.
* logs - logs de Catalina y de las aplicaciones.
* server - clases utilizadas solamente por Catalina.
* shared - clases compartidas por todas las aplicaciones web.
* webapps - directorio que contiene las aplicaciones web.
* work - almacenamiento temporal de ficheros y directorios.

## Características del producto

En 2019 se daba soporte únicamente a las versiones mayores 7.x, 8.5.x y 9.x, siendo consideradas las dos primeras versiones antiguas.
Tomcat 3.x (distribución inicial)
* Implementado a partir de las especificaciones Servlet 2.2 y JSP 1.1
* Recarga de servlets
* Funciones básicas HTTP
* Versión sin soporte
Tomcat 4.x
* Implementado a partir de las especificaciones Servlet 2.3 y JSP 1.2
* Contenedor de servlets rediseñado como Catalina.
* Motor JSP rediseñado con Jasper.
* Conector Coyote
* Java Management Extensions (JMX), JSP Y administración basada en Struts.
* Versión sin soporte
Tomcat 5.x
* Implementado a partir de las especificaciones Servlet 2.4 y JSP 2.0
* Recolección de basura reducida.
* Capa envolvente nativa para Windows y Unix para la integración de las plataformas.
* Análisis rápido JSP
* Versión sin soporte
Tomcat 6.x
* Implementado de Servlet 2.5 y JSP 2.1
* Soporte para Unified Expression Language 2.1
* Diseñado para funcionar en Java SE 5.0 y posteriores.
* Soporte para Comet a través de la interfaz CometProcessor.
* Versión sin soporte
Tomcat 7.x
* Implementado de Servlet 3.0 JSP 2.2 y EL 2.2
* Mejoras para detectar y prevenir "fugas de memoria" en las aplicaciones web.
* Limpieza interna de código.
* Soporte para la inclusión de contenidos externos directamente en una aplicación web.
Tomcat 8.x
* Primera versión de Apache Tomcat en soportar las especificaciones de Servlet 3.1, JSP 2.3 y EL 3.0.
* Versión sin soporte
Tomcat 8.5.x
* Añade soporte para HTTP/2, OpenSSL para JSSE, TLS virtual hosting y JASPIC 1.1. Creado desde Tomcat 9, siguiendo los retrasos de Java EE 8.

### Tomcat 9.x

* Primera versión de Apache Tomcat en soportar las especificaciones de Servlet 4.0.

## Historia

Tomcat empezó siendo una implementación de la especificación de los servlets comenzada por James Duncan Davidson, que trabajaba como arquitecto de software en Sun Microsystems y que posteriormente ayudó a hacer al proyecto de código abierto y en su donación a la Apache Software Foundation.
Duncan Davidson inicialmente esperaba que el proyecto se convirtiese en software de código abierto y dado que la mayoría de los proyectos de este tipo tienen libros de O'Reilly asociados con un animal en la portada, quiso ponerle al proyecto nombre de animal. Eligió Tomcat (gato), pretendiendo representar la capacidad de cuidarse por sí mismo, de ser independiente.

### Historial de versiones

Versiones de Apache Tomcat :
| Versión | Fecha de lanzamiento | Descripción |
| 3.0.x. (lanzamiento inicial) | 1999 | Construido a partir de código donado por Sun basado en las especificaciones Servlet 2.2 y JSP 1.1. |
| 3.3.2 | 2004-03-09 | Último lanzamiento de la rama 3.x. Versión discontinuada. |
| 4.1.31 | 2004-10-11 | |
| 4.1.36 | 2008-03-24 | |
| 4.1.39 | 2008-12-03 | |
| 4.1.40 | 2009-06-25 | Último lanzamiento de la rama 4.x. Versión discontinuada. |
| 5.0.0 | 2002-10-09 | |
| 5.0.24 | 2004-05-09 | |
| 5.0.28 | 2004-08-28 | |
| 5.0.30 | 2004-08-30 | Último lanzamiento de la rama 5.x. Versión discontinuada. |
| 5.5.0 | 2004-08-31 | |
| 5.5.1 | 2004-09-07 | |
| 5.5.4 | 2004-11-10 | |
| 5.5.7 | 2005-01-30 | |
| 5.5.9 | 2005-04-11 | |
| 5.5.12 | 2005-10-09 | |
| 5.5.15 | 2006-01-21 | |
| 5.5.16 | 2006-03-16 | |
| 5.5.17 | 2006-04-28 | |
| 5.5.20 | 2006-09-01 | |
| 5.5.23 | 2007-03 | |
| 5.5.25 | 2007-09 | |
| 5.5.26 | 2008-02 | |
| 5.5.27 | 2008-09-08 | |
| 5.5.28 | 2009-09-04 | |
| 5.5.30 | 2010-07-09 | |
| 5.5.31 | 2010-09-16 | |
| 5.5.32 | 2011-02-01 | |
| 5.5.33 | 2011-02-10 | |
| 5.5.34 | 2011-09-22 | |
| 5.5.35 | 2012-01-16 | |
| 5.5.36 | 2012-10-10 | Último lanzamiento de la rama 5.5.x. Versión discontinuada. |
| 6.0.0 | 2006-12-01 | |
| 6.0.10 | 2007-03-01 | |
| 6.0.13 | 2007-05-15 | |
| 6.0.14 | 2007-08-13 | |
| 6.0.16 | 2008-02-07 | |
| 6.0.18 | 2008-07-31 | |
| 6.0.20 | 2009-06-03 | |
| 6.0.24 | 2010-01-21 | |
| 6.0.26 | 2010-03-11 | |
| 6.0.28 | 2010-07-09 | |
| 6.0.29 | 2010-07-22 | |
| 6.0.30 | 2011-01-13 | |
| 6.0.32 | 2011-02-03 | |
| 6.0.33 | 2011-08-18 | |
| 6.0.35 | 2011-11-28 | |
| 6.0.36 | 2012-10-19 | |
| 6.0.37 | 2013-05-03 | Última versión, discontinuada. |
| 7.0.0 beta | 2010-06-29 | Primera versión de Apache Tomcat que soporta las especificaciones Servlet 3.0, JSP 2.2 y Expression Language 2.2. Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.4 beta | 2010-10-21 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.5 beta | 2010-12-01 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.6 | 2011-01-14 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.8 | 2011-02-05 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.10 | 2011-03-07 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.11 | 2011-03-11 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.12 | 2011-04-06 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.14 | 2011-05-12 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.16 | 2011-06-17 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.19 | 2011-07-19 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.20 | 2011-08-11 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.21 | 2011-09-01 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.22 | 2011-10-01 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.23 | 2011-11-20 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.25 | 2012-01-21 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.26 | 2012-02-21 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.27 | 2012-04-05 | Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.28 | 2012-06-15 | Afectada por las vulnerabilidades CVE-2018-1336 y CV-2019-0232. |
| 7.0.29 | 2012-07-08 | Afectada por las vulnerabilidades CVE-2018-1336 y CV-2019-0232. |
| 7.0.30 | 2012-09-06 | Afectada por las vulnerabilidades CVE-2018-1336 y CV-2019-0232. |
| 7.0.32 | 2012-10-07 | Afectada por las vulnerabilidades CVE-2018-1336 y CV-2019-0232. |
| 7.0.33 | 2012-11-21 | Afectada por las vulnerabilidades CVE-2018-1336 y CV-2019-0232. |
| 7.0.34 | 2012-12-12 | Afectada por las vulnerabilidades CVE-2018-1336 y CV-2019-0232. |
| 7.0.35 | 2013 | Afectada por las vulnerabilidades CVE-2018-1336, CVE-2018-8034 y CV-2019-0232. |
| 7.0.37 | 2013-02-18 | Afectada por las vulnerabilidades CVE-2018-1336, CVE-2018-8034 y CV-2019-0232. |
| 7.0.39 | 2013-03-26 | Afectada por las vulnerabilidades CVE-2018-1336, CVE-2018-8034 y CV-2019-0232. |
| 7.0.41 | 2013-04-29 | Afectada por las vulnerabilidades CVE-2018-1336, CVE-2018-8034 y CV-2019-0232. |
| 7.0.42 hasta 7.0.86 | | Afectada por las vulnerabilidades CVE-2018-1336, CVE-2018-8034 y CV-2019-0232. |
| 7.0.87 hasta 7.0.88 | | Afectada por las vulnerabilidades CVE-2018-8034 y CVE-2019-0232 |
| 7.0.90 | | Solventa las vulnerabilidades CVE-2018-1336 y CVE-2018-8034 que presentaban 7.0.28 hasta 7.0.86 y 7.0.35 hasta 7.0.88 respectivamente. Afectada por la vulnerabilidad CV-2019-0232. |
| 7.0.94 | | Solventa las vulnerabilidades CVE-2018-1336, CVE-2018-8034 y CV-2019-0232. |
| 7.0.96 | 2019-07-29 | Última versión 7.0.x estable |
| 8.0 | 2014-06-25 | |
| 8.0.0.RC1 hasta 8.0.51 | | Afectadas por las vulnerabilidades CVE-2018-1336 y CVE-2018-8034 |
| 8.0.52 | | Afectada por la vulnerabilidad CVE-2018-8034 |
| 8.0.53 | 2018-07-05 | Última versión 8.0.x estable publicada. Versión 8.0 sin soporte. |
| 8.5.0 hasta 8.5.5 | | Afectadas por las vulnerabilidades CVE-2018-1336 y CVE-2018-8034 y CV-2019-0232 |
| 8.5.6 hasta 8.5.30 | | Afectadas por las vulnerabilidades CVE-2018-1336, CVE-2018-8034, CVE-2018-8037 y CV-2019-0232 |
| 8.5.31 | | Afectada por las vulnerabilidades CVE-2018-8034, CVE-2018-8037 y CV-2019-0232 |
| 8.5.32 | | Solventa las vulnerabilidades CVE-2018-1336, CVE-2018-8034 y CVE-2018-8037 Afectada por la vulnerabilidad CVE-2019-0232. |
| 8.5.33 hasta 8.5.39 | | Afectadas por la vulnerabilidad CVE-2019-0232. |
| 8.5.40 | | Solventa la vulnerabilidad CVE-2019-0232. |
| 8.5.54 | 2019-08-21 | Última versión 8.5.x estable. Versión discontinuada. |
| 9.0 | 2019-01-18 | Primer Apache Tomcat en soportar las especificaciones Servlet 4.0. |
| 9.0.0.M1 hasta 9.0.0.M9 | | Afectada por las vulnerabilidades CVE-2018-8034 y CVE-2019-0232. |
| 9.0.0.M9 hasta 9.0.7 | | Afectadas por las vulnerabilidades CVE-2018-8034, CVE-2018-8037, CVE-2018-81336 y CVE-2019-0232. |
| 9.0.8 hasta 9.0.9 | | Afectadas por las vulnerabilidades CVE-2018-8034, CVE-2018-8037 y CVE-2019-0232. |
| 9.0.10 | | Solventa las vulnerabilidades CVE-2018-8034, CVE-2018-8037 y CVE-2018-81336. Afectada por la vulnerabilidad CVE-2019-0232. |
| 9.0.11 hasta 9.0.17 | | Afectadas por la vulnerabilidad CVE-2019-0232. |
| 9.0.18 | | Solventa la vulnerabilidad CVE-2019-0232. |
| 9.0.24 | 2019-08-17 | Última versión 9.x estable. |
| 10.1.7 | 2023-03-03 | Actual (x-07/03/2023) |
| 11.0.0-M4 | 2023-03-06 | (Alpha) |

## Notas y referencias

* ↑ Apache Tomcat Project. «Apache Tomcat». Consultado el 5 de octubre de 2015.
* ↑ Saegesser, Marc A. «Apache Tomcat® - Which Version Do I Want?». tomcat.apache.org. Consultado el 24 de agosto de 2018.
* 1 2 «Vulnerabilidad de ejecución remota de código en Apache Tomcat». CCN-CERT. 16 de abril de 2019. Consultado el 3 de septiembre de 2019.
* ↑ «Vulnerabilidades en Apache Tomcat». CCN-CERT. 24 de julio de 2018. Consultado el 3 de septiembre de 2019.