WAR (formato de arquivo)
# WAR (formato de arquivo)

Em engenharia de software, um arquivo WAR (do inglês Web application ARchive) é um arquivo JAR usado para distribuir uma coleção de JavaServer Pages, Servlets Java, classes Java, arquivos XML, bibliotecas de tag, páginas web estáticas (arquivos HTML e relacionados) e outros recursos que, juntos, constituem uma aplicação web.

## Conteúdo e estrutura

Um arquivo WAR pode ser assinado digitalmente do mesmo modo que um arquivo JAR, afim de permitir que outros determinem de que fonte o código é proveniente.
Há arquivos e diretórios especiais dentro de um arquivo WAR.
O diretório /WEB-INF no arquivo WAR contem um arquivo chamado web.xml que define a estrutura da aplicação web. Se a aplicação web está apenas servido arquivos JSP, o arquivo web.xml não é estritamente necessário. Se a aplicação web utiliza servlets, então o recipiente (container) de servlets usa o web.xml para determinar a qual servlet uma solicitação de URL será roteada. O web.xml também é usado para definir variáveis de contexto que podem ser referenciadas dentro dos servlets e é usada para definir dependências de ambiente que o implantador (deployer) espera configurar. Um exemplo disto é uma dependência de uma sessão de email usada para enviar email. O recipiente de servlet é responsável por fornecer este serviço.
Vantagens dos arquivos WAR:
* desenvolvimento, teste e implantação fáceis
* a versão da aplicação implantada é facilmente identificada
* todos os recipientes Java EE suportam arquivos .WAR
Uma desvantagem da implantação web utilizando arquivos WAR em ambientes muito dinâmicos é que alterações pequenas não podem ser feitas durante o tempo de execução. Qualquer alteração, seja qual for, requer regeração e reimplantação do arquivo WAR inteiro.
O seguinte web.xml demonstra como um servlet é declarado e associado.
O diretório /WEB-INF/classes está no classpath do ClassLoader. Isto é onde os arquivos .class são carregados quando a aplicação web está em execução. Quaisquer arquivos JAR colocados no diretório /WEB-INF/lib também será colocado no classpath do ClassLoader.