

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de la plataforma Tomcat de Elastic Beanstalk
<a name="java-tomcat-platform"></a>

En este tema se describe cómo configurar, crear y ejecutar las aplicaciones Java que se ejecutan en la plataforma Elastic Beanstalk Tomcat.

La plataforma AWS Elastic Beanstalk Tomcat es un conjunto de [versiones de plataforma](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.java) para aplicaciones web Java que se pueden ejecutar en un contenedor web Tomcat. Tomcat se ejecuta detrás de un servidor proxy nginx. Cada ramificación de la plataforma corresponde a una versión principal de Tomcat.

En la consola de Elastic Beanstalk hay opciones de configuración disponibles para [modificar la configuración de un entorno en ejecución](environment-configuration-methods-after.md). Para evitar perder la configuración del entorno cuando lo termina, puede usar las [configuraciones guardadas](environment-configuration-savedconfig.md) para guardar la configuración y aplicarla posteriormente a otro entorno.

Para guardar la configuración en el código fuente, puede incluir [archivos de configuración](ebextensions.md). Los valores de configuración de los archivos de configuración se aplican cada vez que crea un entorno o que implementa la aplicación. También puede usar archivos de configuración para instalar paquetes, ejecutar scripts y llevar a cabo otras operaciones de personalización de instancias durante las implementaciones.

Las plataforma Tomcat de Elastic Beanstalk incluye un proxy inverso que reenvía las solicitudes a su aplicación. Puede usar [opciones de configuración](#java-tomcat-namespaces) para configurar el servidor proxy para servir recursos estáticos de una carpeta del código fuente con el fin de reducir la carga en su aplicación. Para escenarios avanzados, puede [incluir sus propios archivos `.conf`](java-tomcat-proxy.md) en el paquete de código fuente para ampliar la configuración del proxy de Elastic Beanstalk o sobrescribirla completamente.

**nota**  
Elastic Beanstalk admite [nginx](https://www.nginx.com/) (el valor predeterminado) y [Apache HTTP Server](https://httpd.apache.org/) como servidores proxy en la plataforma Tomcat. Si su entorno Tomcat de Elastic Beanstalk utiliza una rama de plataforma de la AMI de Amazon Linux (anterior a Amazon Linux 2), también tiene la opción de utilizar [Apache HTTP Server versión 2.2](https://httpd.apache.org/docs/2.2/). Apache (el más reciente) es el valor predeterminado en estas ramas de plataforma más antiguas.   
 [El 18 de julio de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **Elastic Beanstalk estableció el estado de todas las ramas de plataforma basadas en la AMI AL1 de Amazon Linux () como retiradas.** Para obtener más información sobre la migración a una ramificación de la plataforma Amazon Linux 2023 actual y totalmente compatible, consulte [Migración de su aplicación de Linux de Elastic Beanstalk a Amazon Linux 2023 o Amazon Linux 2](using-features.migration-al.md).

Debe empaquetar las aplicaciones Java en un archivo de aplicación web (WAR) con una estructura específica. Para obtener información sobre la estructura necesaria y su relación con la estructura de directorios de su proyecto, consulte [Estructuración de la carpeta de proyectos](java-tomcat-platform-directorystructure.md).

Para ejecutar varias aplicaciones en el mismo servidor web, puede [agrupar varios archivos WAR](java-tomcat-multiple-war-files.md) en un solo paquete de código fuente. Cada aplicación de un paquete múltiple de código fuente WAR se ejecuta en la ruta raíz (`ROOT.war` se ejecuta en `myapp.elasticbeanstalk.com/`) o en una ruta directamente debajo de ella (`app2.war` se ejecuta en `myapp.elasticbeanstalk.com/app2/`), según lo especifique el nombre del paquete WAR. En un único paquete de código fuente WAR, la aplicación siempre se ejecuta en la ruta raíz.

La configuración aplicada en la consola de Elastic Beanstalk anula la misma configuración en los archivos de configuración, si existe. Esto le permite tener la configuración predeterminada en los archivos de configuración y anularla con la configuración específica del entorno en la consola. Para obtener más información acerca de la prioridad y otros métodos para cambiar valores de configuración, consulte [Opciones de configuración](command-options.md).

Para obtener más información sobre las diversas formas en las que puede ampliar una plataforma Elastic Beanstalk basada en Linux, consulte [Ampliación de las plataformas Linux de Elastic Beanstalk](platforms-linux-extend.md).

**Topics**
+ [Configuración del entorno de Tomcat](#java-tomcat-options)
+ [Espacios de nombres de configuración de Tomcat](#java-tomcat-namespaces)
+ [Agrupación de varios archivos WAR en entornos Tomcat](java-tomcat-multiple-war-files.md)
+ [Estructuración de la carpeta de proyectos](java-tomcat-platform-directorystructure.md)
+ [Configuración del servidor proxy](java-tomcat-proxy.md)

## Configuración del entorno de Tomcat
<a name="java-tomcat-options"></a>

La plataforma Tomcat de Elastic Beanstalk proporciona algunas opciones específicas de la plataforma, además de las opciones estándar que tienen todas las plataformas. Estas opciones le permiten configurar la máquina virtual Java (JVM) que se ejecuta en los servidores web del entorno y definir las propiedades del sistema que proporcionan las cadenas de configuración a su aplicación.

Puede utilizar la consola de Elastic Beanstalk para habilitar la rotación de registros en Amazon S3 y configurar variables que la aplicación pueda leer desde el entorno.

**Para configurar el entorno Tomcat en la consola de Elastic Beanstalk**

1. Abra la consola de [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) y, **en** la lista Regiones, seleccione su. Región de AWS

1. En el panel de navegación, elija **Environments** (Entornos) y, a continuación, elija el nombre del entorno en la lista.

1. En el panel de navegación, elija **Configuración**.

1. En la categoría de configuración **Actualizaciones, supervisión y registro**, seleccione **Edición de**.

### Opciones de contenedor
<a name="java-tomcat-options-container"></a>

Puede especificar estas opciones específicas de la plataforma:
+ **Proxy server (Servidor proxy)**: el servidor proxy que utilizar en las instancias del entorno. De forma predeterminada, se utiliza nginx.

### Opciones del contenedor de JVM
<a name="java-tomcat-options-jvm"></a>

El tamaño de montón de la máquina virtual Java (JVM) determina la cantidad de objetos que su aplicación puede crear en memoria antes de que se produzca la *[recopilación de elementos no utilizados](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/introduction.html)*. Puede modificar **Initial JVM Heap Size ** (`-Xms option`) y **Maximum JVM Heap Size** (opción `-Xmx`). Un tamaño de montón inicial mayor permite que se creen más objetos antes de que se recopilen los elementos no utilizados, pero también implica que el recolector de elementos no utilizados tardará más tiempo en compactar el montón. El tamaño de montón máximo especifica la cantidad máxima de memoria que la JVM puede asignar al ampliar el montón durante un periodo de actividad intensa.

**nota**  
La memoria disponible depende del tipo de instancia de Amazon EC2. Para obtener más información acerca de los tipos de instancias EC2 disponibles para su entorno de Elastic Beanstalk. consulte [Tipos de instancias](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) en la *Guía del usuario de Amazon Elastic Compute Cloud para las instancias de Linux*.

La *generación permanente* es una sección del montón de JVM que almacena definiciones de clases y metadatos asociados. Para modificar el tamaño de la generación permanente, escriba el nuevo tamaño en la opción ** PermGen Tamaño máximo de la JVM** (`-XX:MaxPermSize`). Esta configuración solo se aplica a Java 7 y versiones anteriores. **Esta opción quedó obsoleta en el JDK 8 y fue reemplazada por la MaxMetaspace opción Size ().** `-XX:MaxMetaspaceSize`

**importante**  
JDK 17 eliminó la compatibilidad con la opción `-XX:MaxPermSize` de Java. El uso de esta opción con un entorno que se ejecuta en una ramificación de la plataforma de Elastic Beanstalk con Corretto 17 generará un error. Elastic Beanstalk publicó su primera ramificación de la plataforma que ejecuta Tomcat con Corretto 17 el [13 de julio de 2023.](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2023-07-13-al2023.html)  
Para obtener más información, consulte los recursos siguientes.  
Sitio web de documentación de Oracle Java: [opciones de Java eliminadas](https://docs.oracle.com/en/java/javase/17/docs/specs/man/java.html#removed-java-options) 
Sitio web de documentación de Oracle Java: sección de *Metadatos de clase* en [Otras consideraciones](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html)

*Para obtener más información sobre las plataformas de Elastic Beanstalk y sus componentes, consulte [Plataformas compatibles](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html) en la guía de Plataformas de AWS Elastic Beanstalk .*

### Log Options (Opciones de registro)
<a name="java-tomcat-options-logs"></a>

La sección **Log Options (Opciones de registro)** tiene dos valores:
+ **Instance profile (Perfil de instancia)**: especifica el perfil de instancia que tiene permiso para obtener acceso al bucket de Amazon S3 asociado con la aplicación.
+ **Enable log file rotation to Amazon S3 (Habilitar la rotación de archivos de registro para Amazon S3)**: especifica si los archivos de registro de las instancias de Amazon EC2 de la aplicación se copian en el bucket de Amazon S3 asociado a la aplicación.

### Archivos estáticos
<a name="java-tomcat-options-staticfiles"></a>

Para mejorar el rendimiento, puede utilizar la sección **Static files** (Archivos estáticos) para configurar el servidor proxy para entregar archivos estáticos de servidor (por ejemplo, HTML o imágenes) desde un conjunto de directorios dentro de su aplicación web. Para cada directorio, se establece la ruta virtual para la asignación de directorios. Cuando el servidor proxy recibe una solicitud de un archivo en la ruta especificada, proporciona directamente el archivo en lugar de direccionar la solicitud la aplicación.

Para obtener más información sobre la configuración de archivos estáticos mediante archivos de configuración o la consola de Elastic Beanstalk, consulte [Distribución de archivos estáticos](environment-cfg-staticfiles.md).

### Propiedades del entorno
<a name="java-tomcat-options-properties"></a>

En la sección **Environment Properties (Propiedades de entorno)**, puede especificar opciones de configuración del entorno en las instancias de Amazon EC2 que ejecutan su aplicación. Las propiedades del entorno se pasan como pares de clave-valor a la aplicación. 

La plataforma Tomcat define una propiedad comodín denominada `JDBC_CONNECTION_STRING` para los entornos Tomcat para pasar una cadena de conexión a una base de datos externa.

**nota**  
Si asocia una instancia de base de datos de RDS a su entorno, cree la cadena de conexión de JDBC dinámicamente desde las propiedades del entorno de Amazon Relational Database Service (Amazon RDS) proporcionadas por Elastic Beanstalk. Utilice JDBC\$1CONNECTION\$1STRING solo para las instancias de base de datos que no se aprovisionan con Elastic Beanstalk.  
Para obtener más información sobre el uso de Amazon RDS con su aplicación Java, consulte [Adición de una instancia de base de datos de Amazon RDS a su entorno de Java Elastic Beanstalk](java-rds.md).

Para las versiones de la plataforma Tomcat publicadas antes del [26 de marzo de 2025](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html), se puede acceder a las variables de entorno mediante `System.getProperty()`. Por ejemplo, podría leer una propiedad denominada `API_ENDPOINT` en una variable con el siguiente código.

```
String endpoint = System.getProperty("API_ENDPOINT");
```

En las versiones de la plataforma Tomcat publicadas a partir del [26 de marzo de 2025](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html) también se puede utilizar `System.getenv` para acceder a variables de entorno de texto sin formato. Puede seguir utilizando `System.getProperty` para acceder a las variables de entorno de texto sin formato. Sin embargo, [las variables de entorno almacenadas como secretas](AWSHowTo.secrets.env-vars.md) solo están disponibles mediante `System.getenv`. Por ejemplo, podría leer una variable de entorno denominada `API_KEY` con el siguiente código.

```
String apiKey = System.getenv("API_KEY");
```

**importante**  
Al añadir acceso `System.getenv()` a las variables de entorno en las versiones de la plataforma Tomcat publicadas a partir del [26 de marzo de 2025](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html), puede producirse un comportamiento inesperado en las aplicaciones que dan prioridad a las variables de entorno sobre las propiedades del sistema Java o al cambiar explícitamente de `System.getProperty()` a `System.getenv()`.  
Dado que las propiedades del sistema (que se transmiten mediante línea de comandos) requieren aplicar un escape en el intérprete de comandos para los caracteres especiales, mientras que las variables de entorno no, es posible que los valores se resuelvan de forma diferente cuando se utilizan variables de entorno en lugar de propiedades del sistema Java.  
Si su aplicación se ve afectada, considere lo siguiente:  
Eliminar los caracteres de escape de los valores de propiedad del entorno al usar `System.getenv()`.
Configurar la aplicación para utilizar `System.getProperty()` de forma explícita.
Probar minuciosamente la aplicación al actualizar para garantizar un comportamiento coherente.

Para obtener más información, consulte [Configuración de las variables de entorno y otras opciones de software](environments-cfg-softwaresettings.md).

## Espacios de nombres de configuración de Tomcat
<a name="java-tomcat-namespaces"></a>

Puede usar un [archivo de configuración](ebextensions.md) para definir opciones de configuración y realizar otras tareas de configuración en las instancias durante las implementaciones. Las opciones de configuración pueden ser [específicas de la plataforma](command-options-specific.md) o aplicarse a [todas las plataformas](command-options-general.md) del servicio de Elastic Beanstalk en su conjunto. Las opciones de configuración se organizan en *espacios de nombres*.

La plataforma Tomcat admite las opciones de los siguientes espacios de nombres, además de las [opciones admitidas para todos los entornos de Elastic Beanstalk](command-options-general.md):
+ `aws:elasticbeanstalk:container:tomcat:jvmoptions`: modificar la configuración de JVM. Las opciones de este espacio de nombres se corresponden con las opciones de la consola de administración de la siguiente manera:
  + `Xms` – **JVM command line options (opciones de la línea de comandos de JVM)**
  + `JVM Options` – **JVM command line options (opciones de la línea de comandos de JVM)**
+ `aws:elasticbeanstalk:environment:proxy`: elija el servidor proxy del entorno.

El siguiente archivo de configuración de ejemplo muestra el uso de las opciones de configuración específicas de Tomcat.

**Example .ebextensions/tomcat-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:tomcat:jvmoptions:
    Xms: 512m
    JVM Options: '-Xmn128m'
  aws:elasticbeanstalk:application:environment:
    API_ENDPOINT: mywebapi.zkpexsjtmd.us-west-2.elasticbeanstalk.com
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
```

Elastic Beanstalk cuenta con numerosas opciones de configuración para personalizar el entorno. Además de los archivos de configuración, también puede definir opciones en la consola, configuraciones guardadas, la CLI de EB o la AWS CLI. Para obtener más información, consulte [Opciones de configuración](command-options.md).

## Plataforma Tomcat de la AMI de Amazon Linux (anterior a Amazon Linux 2)
<a name="tomcat.alami"></a>

Si su entorno Tomcat de Elastic Beanstalk utiliza una versión de la plataforma de la AMI de Amazon Linux (anterior a Amazon Linux 2), lea la información adicional de esta sección.

**Notas**  
La información de este tema solo se aplica a las ramas de plataforma basadas en la AMI de Amazon Linux (AL1). AL2023/las ramas de la AL2 plataforma son incompatibles con las versiones anteriores de la plataforma AMI (AL1) de Amazon Linux y *requieren ajustes de configuración diferentes*.
 [El 18 de julio de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **Elastic Beanstalk estableció el estado de todas las ramas de plataforma basadas en la AMI AL1 de Amazon Linux () como retiradas.** Para obtener más información sobre la migración a una ramificación de la plataforma Amazon Linux 2023 actual y totalmente compatible, consulte [Migración de su aplicación de Linux de Elastic Beanstalk a Amazon Linux 2023 o Amazon Linux 2](using-features.migration-al.md).

### Espacios de nombres de configuración de Tomcat: AMI de Amazon Linux () AL1
<a name="tomcat.alami.namespaces"></a>

La plataforma Tomcat de la AMI de Amazon Linux admite opciones adicionales en los siguientes espacios de nombres:
+ `aws:elasticbeanstalk:container:tomcat:jvmoptions`: además de las opciones mencionadas anteriormente en esta página para este espacio de nombres, las versiones más antiguas de la plataforma de la AMI de Amazon Linux también admiten:
  + `XX:MaxPermSize` – **Maximum JVM permanent generation size (Máximo de generación permanente de JVM)**
+ `aws:elasticbeanstalk:environment:proxy`: además de elegir el servidor proxy, configure también la compresión de respuesta.

El siguiente archivo de configuración de ejemplo muestra el uso de las opciones de configuración de los espacios de nombre del proxy.

**Example .ebextensions/tomcat-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    GzipCompression: 'true'
    ProxyServer: nginx
```

### Incluir archivos de configuración de Elastic Beanstalk: AMI de Amazon Linux () AL1
<a name="java-tomcat-ebextensions"></a>

Para implementar los archivos de configuración de `.ebextensions`, incluirlos en código fuente de la aplicación. Para una sola aplicación, añada `.ebextensions` a un archivo WAR comprimido ejecutando el siguiente comando:

**Example**  

```
zip -ur your_application.war .ebextensions
```

Si se trata de una aplicación que necesite varios archivos WAR, consulte [Agrupación de varios archivos WAR en entornos Tomcat](java-tomcat-multiple-war-files.md) para obtener información más detallada.

# Agrupación de varios archivos WAR en entornos Tomcat
<a name="java-tomcat-multiple-war-files"></a>

Si la aplicación web contiene varios componentes de aplicaciones web, puede simplificar las implementaciones y reducir los costos operativos ejecutando los componentes en un único entorno, en lugar de ejecutar un entorno diferente para cada componente. Esta estrategia resulta eficaz con aplicaciones ligeras que no requieren una gran cantidad de recursos y con entornos de desarrollo y pruebas.

Para implementar varias aplicaciones web en el entorno, combine los archivos WAR (archivo de aplicación web) de cada componente en un único [paquete de código fuente](applications-sourcebundle.md).

Para crear un paquete de código fuente de la aplicación que contenga varios archivos WAR, organice estos archivos utilizando la siguiente estructura.

```
MyApplication.zip
├── .ebextensions
├── .platform
├── foo.war
├── bar.war
└── ROOT.war
```

Al implementar un paquete de código fuente que contiene varios archivos WAR en un AWS Elastic Beanstalk entorno, se puede acceder a cada aplicación desde una ruta diferente a la del nombre de dominio raíz. El ejemplo anterior contenía tres aplicaciones: `foo`, `bar` y `ROOT`. `ROOT.war` es un nombre de archivo especial que le indica a Elastic Beanstalk que ejecute esa aplicación en el dominio raíz, por lo que las tres aplicaciones estarán disponibles en `http://MyApplication.elasticbeanstalk.com/foo`, `http://MyApplication.elasticbeanstalk.com/bar` y `http://MyApplication.elasticbeanstalk.com`.

El paquete fuente puede incluir archivos WAR, una carpeta `.ebextensions` opcional y una carpeta `.platform` opcional. Para obtener información detallada sobre estas carpetas de configuración opcionales, consulte [Ampliación de las plataformas Linux de Elastic Beanstalk](platforms-linux-extend.md).

**Para lanzar un entorno (consola)**

1. [Abra la consola de Elastic Beanstalk con este enlace preconfigurado: console.aws.amazon. com/elasticbeanstalk/home\$1/newApplication? ApplicationName=Tutorials&EnvironmentType= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. En **Platform (Plataforma)**, seleccione la plataforma y la ramificación de plataforma que coincidan con el idioma utilizado por su aplicación, o la plataforma Docker para aplicaciones basadas en contenedores.

1. En **Código de la aplicación**, seleccione **Cargar su propio código**.

1. Elija **Local file (Archivo local)**, seleccione **Choose file (Seleccionar archivo)** y abra el paquete de código fuente.

1. Elija **Review and launch (Revisar y lanzar)**.

1. Revise la configuración disponible y, a continuación, elija **Create app (Creación de aplicación)**.

Para obtener más información sobre la creación de paquetes de código fuente, consulte [Creación de una agrupación de orígenes de aplicación en Elastic Beanstalk.](applications-sourcebundle.md).

# Estructuración de la carpeta de proyectos
<a name="java-tomcat-platform-directorystructure"></a>

Para que todo funcione al realizar la implementación en un servidor Tomcat, los archivos de aplicación web (archivos WAR) compilados con Java Platform Enterprise Edition (*Java EE*) deben estar estructurados de acuerdo con ciertas [directrices](https://docs.oracle.com/javaee/7/tutorial/packaging003.htm). El directorio de proyectos no tiene que ajustarse a los mismos estándares, pero es recomendable estructurarlo de la misma manera para simplificar la compilación y el empaquetado. Estructurar la carpeta de proyectos igual que el contenido del archivo WAR también le ayuda a comprender cómo se relacionan los archivos y cómo se comportan en un servidor web.

En la siguiente jerarquía recomendada, el código fuente de la aplicación web se coloca en un directorio `src` para aislarlo del script de compilación y del archivo WAR que genera.

```
~/workspace/my-app/
|-- build.sh            - Build script that compiles classes and creates a WAR
|-- README.MD           - Readme file with information about your project, notes
|-- ROOT.war            - Source bundle artifact created by build.sh
`-- src                 - Source code folder
    |-- WEB-INF         - Folder for private supporting files
    |   |-- classes     - Compiled classes
    |   |-- lib         - JAR libraries
    |   |-- tags        - Tag files
    |   |-- tlds        - Tag Library Descriptor files
    |   `-- web.xml     - Deployment Descriptor
    |-- com             - Uncompiled classes
    |-- css             - Style sheets
    |-- images          - Image files
    |-- js              - JavaScript files
    `-- default.jsp     - JSP (JavaServer Pages) webpage
```

El contenido del archivo `src` coincide con lo que se va a empaquetar e implementar en el servidor, a excepción de la carpeta `com`. La carpeta `com` contiene las clases no compiladas (archivos `.java`). Deben compilarse y guardarse en el directorio `WEB-INF/classes` para que estén accesibles desde el código de la aplicación.

El directorio `WEB-INF` contiene código y configuraciones que no se proporcionan públicamente en el servidor web. Las demás carpetas de la raíz del directorio de código fuente (`css`, `images` y `js`) están disponibles públicamente en la ruta correspondiente del servidor web.

El siguiente ejemplo es idéntico al directorio de proyectos anterior, salvo que contiene más archivos y subdirectorios. En este ejemplo, el proyecto contiene etiquetas sencillas, un modelo y clases de compatibilidad, así como un archivo de Java Server Pages (JSP) para un recurso `record`. También incluye una hoja de estilos y, JavaScript para [Bootstrap](http://getbootstrap.com/), un archivo JSP predeterminado y una página de errores para los errores 404.

`WEB-INF/lib` contiene un archivo de Java Archive (JAR) con el controlador de Java Database Connectivity (JDBC) para PostgreSQL. `WEB-INF/classes` está vacío, ya que no se han compilado todavía los archivos de clase.

```
~/workspace/my-app/
|-- build.sh
|-- README.MD
|-- ROOT.war
`-- src
    |-- WEB-INF
    |   |-- classes
    |   |-- lib
    |   |   `-- postgresql-9.4-1201.jdbc4.jar
    |   |-- tags
    |   |   `-- header.tag
    |   |-- tlds
    |   |   `-- records.tld
    |   `-- web.xml
    |-- com
    |   `-- myapp
    |       |-- model
    |       |   `-- Record.java
    |       `-- web
    |           `-- ListRecords.java
    |-- css
    |   |-- bootstrap.min.css
    |   `-- myapp.css
    |-- images
    |   `-- myapp.png
    |-- js
    |   `-- bootstrap.min.js
    |-- 404.jsp
    |-- default.jsp
    `-- records.jsp
```

## Compilación de un archivo WAR con un script de shell
<a name="java-tomcat-platform-directorystructure-building"></a>

`build.sh` es un script de shell muy sencillo que compila las clases de Java, construye un archivo WAR y lo copia en el directorio `webapps` de Tomcat para las pruebas locales.

```
cd src
javac -d WEB-INF/classes com/myapp/model/Record.java
javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/model/Record.java
javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/web/ListRecords.java

jar -cvf ROOT.war *.jsp images css js WEB-INF
cp ROOT.war /Library/Tomcat/webapps
mv ROOT.war ../
```

Dentro del archivo WAR, encontrará la misma estructura que en el directorio `src` del ejemplo anterior, a excepción de la carpeta `src/com`. El comando `jar` crea automáticamente el archivo `META-INF/MANIFEST.MF`.

```
~/workspace/my-app/ROOT.war
|-- META-INF
|   `-- MANIFEST.MF
|-- WEB-INF
|   |-- classes
|   |   `-- com
|   |       `-- myapp
|   |           |-- model
|   |           |   `-- Records.class
|   |           `-- web
|   |               `-- ListRecords.class
|   |-- lib
|   |   `-- postgresql-9.4-1201.jdbc4.jar
|   |-- tags
|   |   `-- header.tag
|   |-- tlds
|   |   `-- records.tld
|   `-- web.xml
|-- css
|   |-- bootstrap.min.css
|   `-- myapp.css
|-- images
|   `-- myapp.png
|-- js
|   `-- bootstrap.min.js
|-- 404.jsp
|-- default.jsp
`-- records.jsp
```

## Uso `.gitignore`
<a name="java-tomcat-platform-gitignore"></a>

Para evitar que se validen los archivos de clases compiladas y los archivos WAR en su repositorio de Git o que aparezcan mensajes cuando ejecute comandos Git, agregue los tipos de archivo pertinentes en un archivo denominado `.gitignore` en la carpeta de su proyecto.

**\$1/workspace/myapp/.gitignore**

```
*.zip
*.class
```

# Configuración del servidor proxy
<a name="java-tomcat-proxy"></a>

La plataforma Tomcat utiliza [nginx](https://www.nginx.com/) (el valor predeterminado) o [Apache HTTP Server](https://httpd.apache.org/) como proxy inverso para transmitir las solicitudes del puerto 80 de la instancia al contenedor web Tomcat que está a la escucha en el puerto 8080. Elastic Beanstalk proporciona una configuración de proxy predeterminada que puede ampliar o anular por completo con su propia configuración.

**Configuración del servidor proxy en la versión de su plataforma**  
Todas las AL2 plataformas AL2023/admiten una función de configuración de proxy uniforme. Para obtener más información sobre la configuración del servidor proxy en las versiones de su plataforma que ejecutan AL2023/AL2, consulte[Configuración del proxy inverso](platforms-linux-extend.proxy.md). 

## Configuración del proxy en la plataforma Tomcat de la AMI de Amazon Linux (anterior a Amazon Linux 2)
<a name="java-tomcat-proxy.alami"></a>

Si su entorno Tomcat de Elastic Beanstalk utiliza una versión de la plataforma de la AMI de Amazon Linux (anterior a Amazon Linux 2), lea la información adicional de esta sección.

**Notas**  
La información de este tema solo se aplica a las ramas de plataforma basadas en la AMI de Amazon Linux (AL1). AL2023/las ramas de la AL2 plataforma son incompatibles con las versiones anteriores de la plataforma AMI (AL1) de Amazon Linux y *requieren ajustes de configuración diferentes*.
 [El 18 de julio de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **Elastic Beanstalk estableció el estado de todas las ramas de plataforma basadas en la AMI AL1 de Amazon Linux () como retiradas.** Para obtener más información sobre la migración a una ramificación de la plataforma Amazon Linux 2023 actual y totalmente compatible, consulte [Migración de su aplicación de Linux de Elastic Beanstalk a Amazon Linux 2023 o Amazon Linux 2](using-features.migration-al.md).

### Elección de un servidor proxy para su entorno Tomcat — AMI de Amazon Linux () AL1
<a name="java-tomcat-proxy.alami"></a>

Las versiones de la plataforma Tomcat basadas en la AMI de Amazon Linux (anterior a Amazon Linux 2) utilizan [Apache 2.4](https://httpd.apache.org/docs/2.4/) para el proxy de forma predeterminada. Puede elegir usar [Apache 2.2](https://httpd.apache.org/docs/2.2/) o [nginx](https://www.nginx.com/) incluyendo un [archivo de configuración](ebextensions.md) en el código fuente. El siguiente ejemplo configura Elastic Beanstalk para usar nginx.

**Example .ebextensions/nginx-proxy.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: nginx
```

### Migración de Apache 2.2 a Apache 2.4 — AMI de Amazon Linux () AL1
<a name="java-tomcat-proxy-apache-migrate"></a>

Si la aplicación se desarrolló para [Apache 2.2](https://httpd.apache.org/docs/2.2/), lea esta sección para obtener información sobre la migración a [Apache 2.4](https://httpd.apache.org/docs/2.4/).

A partir de las configuraciones de la versión 3.0.0 de la plataforma Tomcat, que se publicaron con la [actualización de Java con la plataforma Tomcat el 24 de mayo de 2018](https://aws.amazon.com/releasenotes/release-aws-elastic-beanstalk-platform-update-for-the-java-with-tomcat-platform-on-may-24-2018/), Apache 2.4 es el proxy predeterminado de la plataforma Tomcat. Los archivos `.conf` de Apache 2.4 son en su mayoría, pero no todos, compatibles con los de Apache 2.2. Elastic Beanstalk incluye archivos `.conf` predeterminados que funcionan correctamente con cada versión de Apache. Si la aplicación no personaliza la configuración de Apache, tal y como se explica en [Ampliación y anulación de la configuración predeterminada de Apache: AMI de Amazon Linux () AL1](#java-tomcat-proxy-apache), debería migrar a Apache 2.4 sin problemas.

Si la aplicación amplía o anula la configuración de Apache, es posible que tenga que realizar algunos cambios para migrar a Apache 2.4. Para obtener más información, consulte [Upgrading to 2.4 from 2.2](https://httpd.apache.org/docs/current/upgrading.html) en el sitio web de *The Apache Software Foundation*. Como medida temporal, hasta que migre correctamente a Apache 2.4, puede utilizar Apache 2.2 con su aplicación; para ello, incluya el segmento [archivo de configuración](ebextensions.md) en el código fuente.

**Example .ebextensions/ .config apache-legacy-proxy**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache/2.2
```

Para obtener una solución rápida, también puede seleccionar el servidor proxy en la consola de Elastic Beanstalk.

**Para seleccionar el proxy en el entorno Tomcat en la consola de Elastic Beanstalk**

1. Abra la consola de [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) y, **en** la lista Regiones, seleccione su. Región de AWS

1. En el panel de navegación, elija **Environments** (Entornos) y, a continuación, elija el nombre del entorno en la lista.

1. En el panel de navegación, elija **Configuración**.

1. En la categoría de configuración **Actualizaciones, supervisión y registro**, seleccione **Edición de**.

1. En **Proxy server (Servidor proxy)**, elija `Apache 2.2 (deprecated)`.

1. Para guardar los cambios, elija **Aplicar** en la parte inferior de la página.

![\[Selección del proxy para un entorno Tomcat en la categoría de configuración de software de la consola de Elastic Beanstalk\]](http://docs.aws.amazon.com/es_es/elasticbeanstalk/latest/dg/images/java-tomcat-proxy-selection.png)


### Ampliación y anulación de la configuración predeterminada de Apache: AMI de Amazon Linux () AL1
<a name="java-tomcat-proxy-apache"></a>

Puede ampliar la configuración de Apache predeterminada de Elastic Beanstalk con archivos de configuración adicionales. Si lo prefiere, puede anular por completo la configuración de Apache predeterminada de Elastic Beanstalk.

**nota**  
Todas las plataformas de Amazon Linux 2 admiten una característica de configuración de proxy uniforme. Para obtener más información sobre la configuración del servidor proxy en las versiones de la plataforma Tomcat que ejecutan Amazon Linux 2, consulte [Configuración del proxy inverso](platforms-linux-extend.proxy.md).
Si va a migrar su aplicación de Elastic Beanstalk a una plataforma de Amazon Linux 2, asegúrese de leer también la información en [Migración de su aplicación de Linux de Elastic Beanstalk a Amazon Linux 2023 o Amazon Linux 2](using-features.migration-al.md).

Para ampliar la configuración de Apache predeterminada de Elastic Beanstalk, añada los archivos de configuración `.conf` a una carpeta con el nombre `.ebextensions/httpd/conf.d` en el paquete de código fuente de su aplicación. La configuración de Apache de Elastic Beanstalk incluye archivos `.conf` en esta carpeta automáticamente.

```
~/workspace/my-app/
|-- .ebextensions
|   -- httpd
|      -- conf.d
|         -- myconf.conf
|         -- ssl.conf
-- index.jsp
```

Por ejemplo, la siguiente configuración de Apache 2.4 agrega un agente de escucha en el puerto 5000.

**Example . ebextensions/httpd/conf.d/port5000.conf**  

```
listen 5000
<VirtualHost *:5000>
  <Proxy *>
    Require all granted
  </Proxy>
  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

  ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>
```

Para anular por completo la configuración de Apache predeterminada de Elastic Beanstalk, incluya una configuración en el paquete de código fuente en `.ebextensions/httpd/conf/httpd.conf`.

```
~/workspace/my-app/
|-- .ebextensions
|   `-- httpd
|       `-- conf
|           `-- httpd.conf
`-- index.jsp
```

Si anula la configuración de Apache de Elastic Beanstalk, agregue las siguientes líneas a su `httpd.conf` para extraer las configuraciones de Elastic Beanstalk de [Informes y monitoreo de estado mejorados de Elastic Beanstalk](health-enhanced.md), la compresión de respuesta y los archivos estáticos.

```
IncludeOptional conf.d/*.conf
IncludeOptional conf.d/elasticbeanstalk/*.conf
```

Si su entorno utiliza Apache 2.2 como proxy, reemplace las directivas `IncludeOptional` por `Include`. Para obtener más información sobre el comportamiento de estas dos directivas en las dos versiones de Apache, consulte [Incluir en Apache 2.4](https://httpd.apache.org/docs/2.4/mod/core.html#include), [IncludeOptional en Apache 2.4](https://httpd.apache.org/docs/2.4/mod/core.html#includeoptional) e [Incluir en](https://httpd.apache.org/docs/2.2/mod/core.html#include) Apache 2.2.

**nota**  
Para anular el agente de escucha predeterminado en el puerto 80, incluya un archivo denominado `00_application.conf` en `.ebextensions/httpd/conf.d/elasticbeanstalk/` para sobrescribir la configuración de Elastic Beanstalk.

Para consultar un ejemplo funcional, eche un vistazo al archivo de configuración predeterminado de Elastic Beanstalk en `/etc/httpd/conf/httpd.conf` en una instancia de su entorno. Todos los archivos de la carpeta `.ebextensions/httpd` del paquete de código fuente se copian en `/etc/httpd` durante las implementaciones.

### Ampliación de la configuración de nginx predeterminada: AMI de Amazon Linux () AL1
<a name="java-tomcat-proxy-nginx"></a>

Para ampliar la configuración predeterminada de nginx de Elastic Beanstalk, añada los archivos de configuración `.conf` a una carpeta con el nombre `.ebextensions/nginx/conf.d/` en el paquete de código fuente de su aplicación. La configuración de nginx de Elastic Beanstalk incluye archivos `.conf` en esta carpeta automáticamente.

```
~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- conf.d
|           |-- elasticbeanstalk
|           |   `-- my-server-conf.conf
|           `-- my-http-conf.conf
`-- index.jsp
```

Los archivos con la extensión .conf en la carpeta `conf.d` se incluyen en el bloque `http` de la configuración predeterminada. Los archivos de la carpeta `conf.d/elasticbeanstalk` se incluyen en el bloque `server` dentro del bloque `http`.

Para anular completamente la configuración predeterminada de nginx de Elastic Beanstalk, incluya una configuración en el paquete de código fuente de `.ebextensions/nginx/nginx.conf`.

```
~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- nginx.conf
`-- index.jsp
```

**Notas**  
Si anula la configuración de nginx de Elastic Beanstalk, añada la siguiente línea al bloque `server` de su configuración para extraer las configuraciones de Elastic Beanstalk del agente de escucha del puerto 80, la compresión de respuesta y los archivos estáticos.  

  ```
   include conf.d/elasticbeanstalk/*.conf;
  ```
Para anular el agente de escucha predeterminado en el puerto 80, incluya un archivo denominado `00_application.conf` en `.ebextensions/nginx/conf.d/elasticbeanstalk/` para sobrescribir la configuración de Elastic Beanstalk.
Incluya también la línea siguiente en el bloque `http` de su configuración para extraer las configuraciones de Elastic Beanstalk para [Informes y monitoreo de estado mejorados de Elastic Beanstalk](health-enhanced.md) y los registros.  

  ```
      include       conf.d/*.conf;
  ```

Para consultar un ejemplo funcional, eche un vistazo al archivo de configuración predeterminado de Elastic Beanstalk en `/etc/nginx/nginx.conf` en una instancia de su entorno. Todos los archivos de la carpeta `.ebextensions/nginx` del paquete de código fuente se copian en `/etc/nginx` durante las implementaciones.