

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usar a plataforma Tomcat do Elastic Beanstalk
<a name="java-tomcat-platform"></a>

Este tópico descreve como configurar, criar e executar suas aplicações Java que são executadas na plataforma Tomcat do Elastic Beanstalk.

A plataforma AWS Elastic Beanstalk Tomcat é um conjunto de [versões da plataforma](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.java) para aplicativos web Java que podem ser executados em um contêiner web Tomcat. Tomcat é executado atrás de um servidor de proxy nginx. Cada ramificação de plataforma corresponde a uma versão principal do Tomcat.

As opções de configuração estão disponíveis no console do Elastic Beanstalk para [modificar a configuração de um ambiente em execução](environment-configuration-methods-after.md). Para evitar a perda da configuração do ambiente quando você terminá-la, você pode usar [configurações salvas](environment-configuration-savedconfig.md) para salvar as configurações e depois aplicá-las a outro ambiente.

Para salvar as configurações no código-fonte, você pode incluir [arquivos de configuração](ebextensions.md). As definições em arquivos de configuração são aplicadas sempre que você cria um ambiente ou implementa a aplicação. Você também pode usar arquivos de configuração para instalar pacotes, executar scripts e realizar outras operações de personalização da instância em implantações.

A plataforma Tomcat do Elastic Beanstalk inclui um proxy reverso que encaminha solicitações para a aplicação. É possível usar [opções de configuração](#java-tomcat-namespaces) para configurar o servidor de proxy para servir os ativos estáticos de uma pasta em seu código-fonte para reduzir a carga em seu aplicativo. Em cenários avançados, é possível [incluir seus próprios arquivos `.conf`](java-tomcat-proxy.md) em seu pacote de origem para estender a configuração de proxy do Elastic Beanstalk; ou substituí-la completamente.

**nota**  
O Elastic Beanstalk é compatível com [nginx](https://www.nginx.com/) (o padrão) e ao [Apache HTTP Server](https://httpd.apache.org/) como servidores de proxy na plataforma Tomcat. Se o seu ambiente do Elastic Beanstalk Tomcat usar uma ramificação de plataforma Amazon Linux AMI (anterior ao Amazon Linux 2), você também terá a opção de usar o [Apache HTTP Server Versão 2.2](https://httpd.apache.org/docs/2.2/). O Apache (mais recente) é o padrão nessas ramificações de plataforma mais antigas.   
 [Em 18 de julho de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **o Elastic Beanstalk definiu o status de todas as ramificações da plataforma baseadas no Amazon Linux AMI AL1 () como descontinuadas.** Para obter mais informações sobre como migrar para uma ramificação da plataforma Amazon Linux 2023 atual e totalmente compatível, consulte [Migrar a aplicação Linux do Elastic Beanstalk para o Amazon Linux 2023 ou Amazon Linux 2](using-features.migration-al.md).

Você deve empacotar os aplicativos Java em um arquivo WAR (Web application archive) com uma estrutura específica. Para obter informações sobre a estrutura necessária e como ela está relacionada à estrutura do diretório de seu projeto, consulte [Estruturar a pasta do projeto](java-tomcat-platform-directorystructure.md).

Para executar vários aplicativos no mesmo servidor Web, você pode [empacotar vários arquivos WAR](java-tomcat-multiple-war-files.md) em um único pacote de origem. Cada aplicativo em um pacote de origem WAR múltiplo é executado no caminho raiz (`ROOT.war` é executado em `myapp.elasticbeanstalk.com/`) ou em um caminho diretamente abaixo dele (`app2.war` é executado no `myapp.elasticbeanstalk.com/app2/`), conforme determinado pelo nome do WAR. Em um pacote de origem de WAR único, o aplicativo sempre é executado no caminho raiz.

As configurações aplicadas no console do Elastic Beanstalk substituem as mesmas configurações em arquivos de configuração, caso elas existam. Isso permite que você tenha configurações padrão em arquivos de configuração e as substitua por configurações específicas de ambiente no console. Para obter mais informações sobre precedência e outros métodos de alteração das configurações, consulte [Opções de configuração](command-options.md).

Para obter detalhes sobre as várias maneiras de estender uma plataforma do Elastic Beanstalk baseada em Linux, consulte [Estender as plataformas Linux do Elastic Beanstalk](platforms-linux-extend.md).

**Topics**
+ [Configurar o grupo do seu ambiente Tomcat](#java-tomcat-options)
+ [Namespaces de configuração do Tomcat](#java-tomcat-namespaces)
+ [Empacotamento de vários arquivos WAR para ambientes Tomcat](java-tomcat-multiple-war-files.md)
+ [Estruturar a pasta do projeto](java-tomcat-platform-directorystructure.md)
+ [Configurar o servidor de proxy](java-tomcat-proxy.md)

## Configurar o grupo do seu ambiente Tomcat
<a name="java-tomcat-options"></a>

A plataforma Tomcat do Elastic Beanstalk fornece algumas opções específicas da plataforma, além de opções padrão que todas as plataformas têm. Essas opções permitem que você configure a máquina virtual Java (JVM), que é executada nos servidores web do ambiente, e defina propriedades do sistema que fornecem strings de configuração de informações ao aplicativo.

É possível usar o console do Elastic Beanstalk para habilitar a alternância de logs para o Amazon S3 e configurar variáveis que sua aplicação pode ler no ambiente.

**Como configurar seu ambiente Tomcat no console do Elastic Beanstalk**

1. Abra o console do [Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk e, **na** lista Regiões, selecione sua. Região da AWS

1. No painel de navegação, selecione **Ambientes** e selecione o nome do ambiente na lista.

1. No painel de navegação, escolha **Configuration (Configuração)**.

1. Na categoria de configuração **Updates, monitoring, and logging (Atualizações, monitoramento e logs)**, escolha **Edit (Editar)**.

### Opções de contêiner
<a name="java-tomcat-options-container"></a>

É possível definir estas opções específicas da plataforma:
+ **Proxy server (Servidor de proxy)**: o servidor de proxy a ser usado nas instâncias de ambiente. Por padrão, é usado nginx.

### Opções de contêiner JVM
<a name="java-tomcat-options-jvm"></a>

O tamanho do heap na máquina virtual Java (JVM) determina quantos objetos seu aplicativo pode criar na memória antes da execução da *[coleta de lixo](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/introduction.html)*. É possível modificar o **Tamanho do heap JVM inicial** (`-Xms option`) e um **Tamanho do heap JVM máximo** (opção `-Xmx`). Um tamanho de heap inicial maior permite que mais objetos sejam criados antes da execução da coleta de lixo, mas também significa que o coletor de lixo levará mais tempo para compactar o heap. O tamanho máximo do heap especifica a quantidade máxima de memória que a JVM pode alocar ao expandir o heap durante uma atividade intensa.

**nota**  
A memória disponível depende do tipo de instância do Amazon EC2. Para obter mais informações sobre os tipos de instância do EC2 disponíveis para o ambiente do Elastic Beanstalk, consulte [Tipos de instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) no *Guia do usuário do Amazon Elastic Compute Cloud*.

A *geração permanente* é uma seção do heap da JVM que armazena definições de classe e metadados associados. Para modificar o tamanho da geração permanente, digite o novo tamanho na opção Tamanho **máximo da JVM PermGen ** (`-XX:MaxPermSize`). Essa configuração se aplica apenas ao Java 7 e versões anteriores. **Essa opção foi descontinuada no JDK 8 e substituída pela opção Size (). MaxMetaspace** `-XX:MaxMetaspaceSize`

**Importante**  
O JDK 17 removeu a compatibilidade com a opção `-XX:MaxPermSize` do Java. O uso dessa opção com um ambiente em execução em uma ramificação da plataforma Elastic Beanstalk com o Corretto 17 resultará em um erro. O Elastic Beanstalk lançou sua primeira ramificação da plataforma executando o Tomcat com o Corretto 17 em [13 de julho de 2023](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2023-07-13-al2023.html).  
Para obter mais informações, consulte os recursos a seguir.  
Site de documentação do Oracle Java: [Opções do Java removidas](https://docs.oracle.com/en/java/javase/17/docs/specs/man/java.html#removed-java-options) 
Site de documentação do Oracle Java: seção *Metadados da classe* em [Outras considerações](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html)

Para obter mais informações sobre as plataformas do Elastic Beanstalk e seus componentes, consulte [Plataformas compatíveis](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html) no *Guia de plataformas do AWS Elastic Beanstalk *.

### Opções de log
<a name="java-tomcat-options-logs"></a>

A seção **Log Options (Opções de log)** tem duas configurações:
+ **Instance profile (Perfil da instância)**: especifica o perfil da instância que tem permissão para acessar o bucket do Amazon S3 associado à sua aplicação.
+ **Enable log file rotation to Amazon S3** (Habilitar a rotação de arquivos de log para o Amazon S3): especifica se os arquivos de log das instâncias do Amazon EC2 da aplicação serão copiados para o bucket do Amazon S3 associado a ela.

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

Para melhorar a performance, você pode usar a seção **Static files** (Arquivos estáticos) para configurar o servidor proxy para servir arquivos estáticos (por exemplo, HTML ou imagens) de um conjunto de diretórios dentro da aplicação Web. Defina, para cada diretório, o caminho virtual para mapeamento de diretórios. Quando o servidor de proxy recebe uma solicitação para um arquivo no caminho especificado, ele atende o arquivo diretamente em vez de rotear solicitação para seu aplicativo.

Para ver detalhes sobre como configurar arquivos estáticos usando arquivos de configuração ou o console do Elastic Beanstalk, consulte [Fornecer arquivos estáticos](environment-cfg-staticfiles.md).

### Propriedades de ambiente
<a name="java-tomcat-options-properties"></a>

Na seção **Environment Properties (Propriedades do ambiente)**, é possível especificar definições de configuração do ambiente nas instâncias do Amazon EC2 que estão executando a aplicação. As propriedades de ambiente são passadas para o aplicativo como pares de chave-valor. 

A plataforma Tomcat define uma propriedade de espaço reservado denominada `JDBC_CONNECTION_STRING` para ambientes Tomcat, para passar uma string de conexão a um banco de dados externo.

**nota**  
Se você anexar uma instância de banco de dados RDS ao seu ambiente, construa a string de conexão JDBC dinamicamente a partir das propriedades do ambiente do Amazon Relational Database Service (Amazon RDS) fornecidas pelo Elastic Beanstalk. Use JDBC\$1CONNECTION\$1STRING apenas para instâncias de banco de dados que não são provisionadas usando o Elastic Beanstalk.  
Para obter mais informações sobre o uso do Amazon RDS com a aplicação Java, consulte [Adicionar uma instância de banco de dados do Amazon RDS ao seu ambiente Java Elastic Beanstalk](java-rds.md).

Para as versões da plataforma Tomcat lançadas antes de [26 de março de 2025](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html), as variáveis de ambiente podem ser acessadas usando `System.getProperty()`. Por exemplo, você pode ler uma propriedade denominada `API_ENDPOINT` de uma variável com o seguinte código.

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

As versões da plataforma Tomcat lançadas em ou após [26 de março de 2025](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html) também podem usar `System.getenv` para acessar variáveis de ambiente de texto simples. Você pode continuar usando `System.getProperty` para acessar variáveis de ambiente de texto simples. No entanto, [variáveis de ambiente armazenadas como segredos](AWSHowTo.secrets.env-vars.md) apenas estão disponíveis usando `System.getenv`. Por exemplo, você poderia ler uma variável de ambiente denominada `API_KEY` com o seguinte código.

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

**Importante**  
A adição do acesso de `System.getenv()` a variáveis de ambiente nas versões da plataforma Tomcat lançadas a partir de [26 de março de 2025](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html) pode causar um comportamento inesperado em aplicações que dão precedência às variáveis de ambiente sobre as propriedades do sistema Java ou ao alternar explicitamente de `System.getProperty()` para `System.getenv()`.  
Como as propriedades do sistema (passadas pela linha de comando) exigem escape do shell para caracteres especiais, enquanto as variáveis de ambiente não, os valores podem ser resolvidos de maneira diferente ao usar variáveis de ambiente em vez de propriedades do sistema Java.  
Se a sua aplicação for afetada, considere:  
Remover caracteres de escape dos valores das propriedades do seu ambiente ao usar `System.getenv()`
Configurar sua aplicação para usar `System.getProperty()` explicitamente
Testar exaustivamente a sua aplicação ao fazer upgrade para garantir um comportamento consistente

Consulte [Variáveis de ambiente e outras configurações de software](environments-cfg-softwaresettings.md) para obter mais informações.

## Namespaces de configuração do Tomcat
<a name="java-tomcat-namespaces"></a>

Você pode usar um [arquivo de configuração](ebextensions.md) para definir opções de configuração e executar outras tarefas de configuração de instância durante implantações. Opções de configuração podem ser [específicas da plataforma](command-options-specific.md) ou aplicáveis a [todas as plataformas](command-options-general.md) no serviço Elastic Beanstalk como um todo. As opções de configuração são organizadas em *namespaces*.

A Plataforma Tomcat é compatível com as opções nos namespaces a seguir, além das [opções compatíveis com todos os ambientes do Elastic Beanstalk](command-options-general.md):
+ `aws:elasticbeanstalk:container:tomcat:jvmoptions`: modificar as configurações do JVM. As opções desse namespace correspondem às do console de gerenciamento, da seguinte maneira:
  + `Xms` – **JVM command line options (Opções de linha de comando da JVM**
  + `JVM Options` – **JVM command line options (Opções de linha de comando da JVM**
+ `aws:elasticbeanstalk:environment:proxy`: escolha o servidor de proxy do ambiente.

O seguinte arquivo de configuração de exemplo mostra o uso das opções de configuração específicas do 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
```

O Elastic Beanstalk oferece muitas opções de configuração para personalizar o ambiente. Além de arquivos de configuração, você também pode definir opções de configuração usando o console, configurações salvas, a EB CLI ou a AWS CLI. Consulte [Opções de configuração](command-options.md) para obter mais informações.

## A plataforma Tomcat da AMI do Amazon Linux (anterior ao Amazon Linux 2)
<a name="tomcat.alami"></a>

Se o seu ambiente Tomcat do Elastic Beanstalk usar uma versão da plataforma AMI do Amazon Linux (anterior ao Amazon Linux 2), leia as informações adicionais nesta seção.

**Observações**  
As informações neste tópico se aplicam somente às ramificações da plataforma baseadas no Amazon Linux AMI (AL1). AL2023/as ramificações da AL2 plataforma são incompatíveis com as versões anteriores da plataforma Amazon Linux AMI (AL1) e *exigem configurações diferentes*.
 [Em 18 de julho de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **o Elastic Beanstalk definiu o status de todas as ramificações da plataforma baseadas no Amazon Linux AMI AL1 () como descontinuadas.** Para obter mais informações sobre como migrar para uma ramificação da plataforma Amazon Linux 2023 atual e totalmente compatível, consulte [Migrar a aplicação Linux do Elastic Beanstalk para o Amazon Linux 2023 ou Amazon Linux 2](using-features.migration-al.md).

### Namespaces de configuração do Tomcat — Amazon Linux AMI () AL1
<a name="tomcat.alami.namespaces"></a>

A plataforma Tomcat da AMI do Amazon Linux é compatível com as opções adicionais nos seguintes namespaces:
+ `aws:elasticbeanstalk:container:tomcat:jvmoptions`: além das opções mencionadas anteriormente nesta página para esse namespace, versões mais antigas da plataforma da AMI do Amazon Linux também são compatíveis com:
  + `XX:MaxPermSize` – **Maximum JVM permanent generation size (Tamanho máximo de geração permanente da JVM**
+ `aws:elasticbeanstalk:environment:proxy`: além de escolher o servidor de proxy, configure também a compactação de resposta.

O exemplo de arquivo de configuração a seguir mostra o uso das opções de configuração de namespace do proxy.

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

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

### Incluir arquivos de configuração do Elastic Beanstalk — Amazon Linux AMI () AL1
<a name="java-tomcat-ebextensions"></a>

Para implantar arquivos de configuração `.ebextensions`, inclua-os na origem do aplicativo. Para um único aplicativo, adicione `.ebextensions` em um arquivo WAR compactado executando o seguinte comando:

**Example**  

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

Para uma aplicação que exige vários arquivos WAR, consulte [Empacotamento de vários arquivos WAR para ambientes Tomcat](java-tomcat-multiple-war-files.md) para obter mais instruções.

# Empacotamento de vários arquivos WAR para ambientes Tomcat
<a name="java-tomcat-multiple-war-files"></a>

Se o aplicativo Web consiste em vários componentes do aplicativo da Web, você pode simplificar as implantações e reduzir os custos operacionais, ao executar componentes em um único ambiente, em vez de executar um ambiente separado para cada componente. Essa estratégia é eficaz para aplicativos leves e econômicos que não exigem uma grande quantidade de recursos e para ambientes de desenvolvimento e teste.

Para implantar vários aplicativos web no ambiente, reúna os arquivos WAR (web application archive) de cada componente em um único [pacote de origem](applications-sourcebundle.md).

Para criar um pacote de origem do aplicativo que contenha vários arquivos WAR, organize os arquivos WAR usando a seguinte estrutura.

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

Quando você implanta um pacote de origem contendo vários arquivos WAR em um AWS Elastic Beanstalk ambiente, cada aplicativo pode ser acessado por um caminho diferente fora do nome de domínio raiz. O exemplo anterior inclui três aplicações: `foo`, `bar` e `ROOT`. `ROOT.war` é um nome de arquivo especial que instrui o Elastic Beanstalk a executar essa aplicação no domínio raiz, de forma que as três aplicações estejam disponíveis em `http://MyApplication.elasticbeanstalk.com/foo`, `http://MyApplication.elasticbeanstalk.com/bar` e `http://MyApplication.elasticbeanstalk.com`.

O pacote de origem pode incluir arquivos WAR, uma pasta `.ebextensions` opcional e uma pasta `.platform` opcional. Para obter detalhes sobre essas pastas de configuração opcionais, consulte [Estender as plataformas Linux do Elastic Beanstalk](platforms-linux-extend.md).

**Para iniciar um ambiente (console)**

1. [Abra o console do Elastic Beanstalk com este link pré-configurado: console.aws.amazon. com/elasticbeanstalk/home\$1/newApplication? Nome do aplicativo = Tutoriais](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced) e tipo de ambiente = LoadBalanced

1. Em **Plataforma**, selecione a plataforma e a ramificação da plataforma que correspondem à linguagem usada pelo aplicativo ou a plataforma do Docker para aplicativos baseados em contêiner.

1. Em **Application code (Código do aplicativo)**, escolha **Upload your code (Fazer upload do código)**.

1. Escolha **Local file (Arquivo local)** e **Choose file (Escolher arquivo)** e abra o pacote de origem.

1. Selecione **Review and launch**.

1. Revise as configurações disponíveis e, em seguida, escolha **Create app**.

Para obter informações sobre como criar pacotes de origem, consulte [Crie um pacote de origem da aplicação Elastic Beanstalk](applications-sourcebundle.md).

# Estruturar a pasta do projeto
<a name="java-tomcat-platform-directorystructure"></a>

Para funcionarem quando implantados em um servidor Tomcat, os arquivos de aplicativo web (arquivos WAR) do Java Platform Enterprise Edition (*Java EE*) precisam ser estruturados de acordo com determinadas [diretrizes](https://docs.oracle.com/javaee/7/tutorial/packaging003.htm). O diretório de seu projeto não precisa atender aos mesmos padrões, mas é uma boa ideia estruturá-lo da mesma forma para simplificar a compilação e o empacotamento. A estruturação da pasta do projeto de modo similar ao conteúdo do arquivo WAR também ajuda você a entender como os arquivos estão relacionados e como eles se comportam em um servidor da web.

Na hierarquia recomendada a seguir, o código-fonte do aplicativo web é colocado em um diretório `src`, a fim e isolá-lo do script de compilação e do arquivo WAR gerado.

```
~/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
```

O conteúdo da pasta `src` corresponde ao que você empacotará e implantará no servidor, com exceção da pasta `com`. A pasta `com` contém as classes não compiladas (arquivos `.java`). Elas precisam ser compiladas e colocadas no diretório `WEB-INF/classes` para ficarem acessíveis do código do aplicativo.

O diretório `WEB-INF` contém código e configurações que não são atendidos publicamente no servidor web. As outras pastas na raiz do diretório de origem (`css`, `images` e `js`) estão disponíveis publicamente no caminho correspondente no servidor web.

O exemplo a seguir é idêntico ao diretório do projeto anterior, exceto pelo fato de conter mais arquivos e subdiretórios. Esse exemplo de projeto inclui tags, modelos e classes de suporte simples e um arquivo Java Server Pages (JSP) para um recurso `record`. Também inclui uma folha de estilo e, JavaScript para o [Bootstrap](http://getbootstrap.com/), um arquivo JSP padrão e uma página de erro para erros 404.

`WEB-INF/lib` inclui um arquivo Java Archive (JAR) contendo o driver Java Database Connectivity (JDBC) para PostgreSQL. `WEB-INF/classes` está vazio porque os arquivos de classe não foram compilados ainda.

```
~/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
```

## Criar um arquivo WAR com um script Shell
<a name="java-tomcat-platform-directorystructure-building"></a>

`build.sh` é um script de shell muito simples que compila classes Java, constrói um arquivo WAR e o copia no diretório `webapps` do Tomcat para testes locais.

```
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 do arquivo WAR, você encontra a mesma estrutura existente no diretório `src` no exemplo anterior, com exceção da pasta `src/com`. O comando `jar` cria automaticamente o arquivo `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
```

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

Para evitar a confirmação de arquivos de classe compilados e de arquivos WAR em seu repositório Git ou a visualização de mensagens sobre a exibição deles quando você executa comandos do Git, adicione os tipos de arquivo relevantes a um arquivo denominado `.gitignore` na pasta do projeto.

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

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

# Configurar o servidor de proxy
<a name="java-tomcat-proxy"></a>

A plataforma Tomcat usa [nginx](https://www.nginx.com/) (o padrão) ou [Apache HTTP Server](https://httpd.apache.org/) como o proxy reverso para retransmitir solicitações da porta 80 na instância para o contêiner da Web Tomcat escutando na porta 8080. O Elastic Beanstalk oferece uma configuração de proxy padrão que pode ser estendida ou substituída completamente por sua própria configuração.

**Configurar o servidor proxy na sua versão da plataforma**  
Todas as AL2 plataformas AL2023/suportam um recurso de configuração de proxy uniforme. Para obter mais informações sobre como configurar o servidor proxy nas versões da sua plataforma executando AL2023/AL2, consulte[Configuração de proxy reverso](platforms-linux-extend.proxy.md). 

## Configurar o proxy na plataforma Tomcat da AMI do Amazon Linux (anterior ao Amazon Linux 2)
<a name="java-tomcat-proxy.alami"></a>

Se o seu ambiente Tomcat do Elastic Beanstalk usar uma versão da plataforma AMI do Amazon Linux (anterior ao Amazon Linux 2), leia as informações adicionais nesta seção.

**Observações**  
As informações neste tópico se aplicam somente às ramificações da plataforma baseadas no Amazon Linux AMI (AL1). AL2023/as ramificações da AL2 plataforma são incompatíveis com as versões anteriores da plataforma Amazon Linux AMI (AL1) e *exigem configurações diferentes*.
 [Em 18 de julho de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **o Elastic Beanstalk definiu o status de todas as ramificações da plataforma baseadas no Amazon Linux AMI AL1 () como descontinuadas.** Para obter mais informações sobre como migrar para uma ramificação da plataforma Amazon Linux 2023 atual e totalmente compatível, consulte [Migrar a aplicação Linux do Elastic Beanstalk para o Amazon Linux 2023 ou Amazon Linux 2](using-features.migration-al.md).

### Escolha de um servidor proxy para seu ambiente Tomcat — Amazon Linux AMI () AL1
<a name="java-tomcat-proxy.alami"></a>

As versões da plataforma Tomcat baseadas na AMI do Amazon Linux (anterior ao Amazon Linux 2) usam o [Apache 2.4](https://httpd.apache.org/docs/2.4/) para o proxy por padrão. Você pode optar por usar o [Apache 2.2](https://httpd.apache.org/docs/2.2/) ou o [nginx](https://www.nginx.com/) incluindo um [arquivo de configuração](ebextensions.md) no código-fonte. O exemplo a seguir configura o Elastic Beanstalk para usar nginx.

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

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

### Migração do Apache 2.2 para o Apache 2.4 — Amazon Linux AMI () AL1
<a name="java-tomcat-proxy-apache-migrate"></a>

Se seu aplicativo foi desenvolvido para o [Apache 2.2](https://httpd.apache.org/docs/2.2/), leia esta seção para saber mais sobre como migrar para o [Apache 2.4](https://httpd.apache.org/docs/2.4/).

A partir das configurações da versão 3.0.0 da plataforma Tomcat, que foram lançadas com a [atualização da plataforma Java com Tomcat em 24 de maio de 2018](https://aws.amazon.com/releasenotes/release-aws-elastic-beanstalk-platform-update-for-the-java-with-tomcat-platform-on-may-24-2018/), o Apache 2.4 é o proxy padrão da plataforma Tomcat. Os arquivos `.conf` do Apache 2.4 são, em sua maioria, mas não inteiramente, compatíveis com os do Apache 2.2. O Elastic Beanstalk inclui arquivos `.conf` padrão que funcionam corretamente com cada versão do Apache. Se seu aplicativo não personalizar a configuração do Apache, conforme explicado em [Estendendo e substituindo a configuração padrão do Apache — Amazon Linux AMI () AL1](#java-tomcat-proxy-apache), ele deve migrar para o Apache 2.4 sem problemas.

Se o seu aplicativo ampliar ou substituir a configuração do Apache, talvez você precise fazer algumas alterações para migrar para o Apache 2.4. Para obter mais informações, consulte [Atualizar da versão 2.2 para 2.4](https://httpd.apache.org/docs/current/upgrading.html) no site *The Apache Software Foundation*. Como uma medida temporária, até você migrar com êxito para o Apache 2.4, você pode optar por usar o Apache 2.2 com seu aplicativo incluindo o seguinte [arquivo de configuração](ebextensions.md) em seu código-fonte.

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

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

Para uma correção rápida, também é possível selecionar o servidor de proxy no console do Elastic Beanstalk.

**Como selecionar o proxy no ambiente Tomcat no console do Elastic Beanstalk**

1. Abra o console do [Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk e, **na** lista Regiões, selecione sua. Região da AWS

1. No painel de navegação, selecione **Ambientes** e selecione o nome do ambiente na lista.

1. No painel de navegação, escolha **Configuration (Configuração)**.

1. Na categoria de configuração **Updates, monitoring, and logging (Atualizações, monitoramento e logs)**, escolha **Edit (Editar)**.

1. Para **Proxy server (Servidor de proxy)**, escolha `Apache 2.2 (deprecated)`.

1. Para salvar as alterações, escolha **Apply (Aplicar)** na parte inferior da página.

![\[Escolher o proxy para um ambiente Tomcat na categoria de configuração de software do console do Elastic Beanstalk\]](http://docs.aws.amazon.com/pt_br/elasticbeanstalk/latest/dg/images/java-tomcat-proxy-selection.png)


### Estendendo e substituindo a configuração padrão do Apache — Amazon Linux AMI () AL1
<a name="java-tomcat-proxy-apache"></a>

É possível estender a configuração padrão do Apache do Elastic Beanstalk com seus arquivos de configuração adicionais. Também há opção de substituir completamente a configuração padrão do Apache do Elastic Beanstalk.

**nota**  
Todas as plataformas do Amazon Linux 2 são compatíveis com um recurso de configuração de proxy uniforme. Para obter detalhes sobre como configurar o servidor proxy em versões da plataforma Tomcat que executam o Amazon Linux 2, consulte [Configuração de proxy reverso](platforms-linux-extend.proxy.md).
Se você estiver migrando a aplicação do Elastic Beanstalk para uma plataforma Amazon Linux 2, leia também as informações em [Migrar a aplicação Linux do Elastic Beanstalk para o Amazon Linux 2023 ou Amazon Linux 2](using-features.migration-al.md).

Para estender a configuração padrão do Apache do Elastic Beanstalk, adicione arquivos de configuração `.conf` a uma pasta chamada `.ebextensions/httpd/conf.d` no pacote de origem da aplicação. A configuração do Apache do Elastic Beanstalk inclui os arquivos `.conf` nessa pasta automaticamente.

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

Por exemplo, a configuração do Apache 2.4 a seguir adiciona um ouvinte na porta 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 substituir completamente a configuração padrão do Apache do Elastic Beanstalk, inclua uma configuração no pacote de origem em `.ebextensions/httpd/conf/httpd.conf`.

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

Se você substituir a configuração do Apache do Elastic Beanstalk, adicione as linhas a seguir a `httpd.conf` para extrair as configurações do Elastic Beanstalk para [Relatórios e monitoramento de integridade aprimorados no Elastic Beanstalk](health-enhanced.md), compactação de resposta e arquivos estáticos.

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

Se seu ambiente usar o Apache 2.2 como o proxy, substitua as diretivas `IncludeOptional` por `Include`. Para obter detalhes sobre o comportamento dessas duas diretivas nas duas versões do Apache, consulte [Incluir no Apache 2.4, no Apache 2.4](https://httpd.apache.org/docs/2.4/mod/core.html#include) e [Incluir IncludeOptional ](https://httpd.apache.org/docs/2.2/mod/core.html#include) [no Apache 2.2](https://httpd.apache.org/docs/2.4/mod/core.html#includeoptional).

**nota**  
Para substituir o listener padrão na porta 80, inclua um arquivo denominado `00_application.conf` em `.ebextensions/httpd/conf.d/elasticbeanstalk/` para substituir a configuração do Elastic Beanstalk.

Para ver um exemplo prático, examine o arquivo de configuração padrão do Elastic Beanstalk em `/etc/httpd/conf/httpd.conf` em uma instância no ambiente. Todos os arquivos na pasta `.ebextensions/httpd` em seu pacote de origem são copiados para `/etc/httpd` durante as implantações.

### Estendendo a configuração padrão do nginx — Amazon Linux AMI () AL1
<a name="java-tomcat-proxy-nginx"></a>

Para estender a configuração padrão do nginx do Elastic Beanstalk, adicione arquivos de configuração `.conf` a uma pasta denominada `.ebextensions/nginx/conf.d/` no pacote de origem da sua aplicação. A configuração nginx do Elastic Beanstalk inclui arquivos `.conf` nesta pasta automaticamente.

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

Os arquivos com a extensão .conf na pasta `conf.d` são incluídos no bloco `http` da configuração padrão. Os arquivos na pasta `conf.d/elasticbeanstalk` são incluídos no bloco `server` dentro do bloco `http`.

Para substituir completamente a configuração nginx padrão do Elastic Beanstalk, inclua uma configuração em seu pacote de origem em `.ebextensions/nginx/nginx.conf`.

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

**Observações**  
Se você substituir a configuração nginx do Elastic Beanstalk, adicione a linha a seguir ao bloco `server` da configuração para extrair as configurações do Elastic Beanstalk para o listener da porta 80, a compactação de resposta e os arquivos estáticos.  

  ```
   include conf.d/elasticbeanstalk/*.conf;
  ```
Para substituir o listener padrão na porta 80, inclua um arquivo denominado `00_application.conf` em `.ebextensions/nginx/conf.d/elasticbeanstalk/` para substituir a configuração do Elastic Beanstalk.
Inclua também a linha a seguir no bloco `http` da configuração para extrair as configurações do Elastic Beanstalk para [Relatórios e monitoramento de integridade aprimorados no Elastic Beanstalk](health-enhanced.md) e registro em log.  

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

Para ver um exemplo prático, examine o arquivo de configuração padrão do Elastic Beanstalk em `/etc/nginx/nginx.conf` em uma instância no ambiente. Todos os arquivos na pasta `.ebextensions/nginx` em seu pacote de origem são copiados para `/etc/nginx` durante as implantações.