estrutura de arquivo de guerra

Cada aplicativo da web, quando carregado no servidor da web, é compactado em um único arquivo .war. WAR agora significa Web Application Resources, embora costumava ser Web ARchive. Na verdade, este é um arquivo zip que contém um aplicativo da Web empacotado.

Veja como é o conteúdo típico de um arquivo war:

/index.html
/guestbook.jsp
/images/logo.png
/js/jquery.js
/WEB-INF/web.xml
/WEB-INF/classes/com/codegym/Util.class
/WEB-INF/classes/com/codegym/MainServlet.class
/WEB-INF/classes/application.properties
/WEB-INF/lib/util.jar
/META-INF/MANIFEST.MF

Dentro do arquivo war estão recursos estáticos da web , como arquivos .html, .css, .js e assim por diante. Também pode haver fotos, vídeos e, em geral, quaisquer arquivos. Eles podem estar na raiz ou em subpastas, não importa. O Tomcat simplesmente os servirá se forem solicitados.

Digamos que seu aplicativo da web seja carregado no servidor da web com o nome apple e, quando http://localhost/apple/images/logo.png for solicitado , o Tomcat retornará o arquivo /images/logo.png .

Separadamente, vale destacar a pasta WEB-INF . Ele é projetado para armazenar código Java nele. O Tomcat não distribuirá seu conteúdo.

/WEB-INF/aulas/ diretório para classes Java não JAR compiladas, incluindo classes de servlet e arquivos de recursos necessários para o carregador antes de executar o aplicativo
/WEB-INF/lib/ lugar para armazenar bibliotecas jar
/WEB-INF/web.xml descritor de implantação

estrutura de arquivos war e projeto maven

Agora vamos passar para a hierarquia de diretórios do projeto Maven. Você pode ver o layout completo do catálogo no manual oficial. Aqui vamos conhecê-lo em uma versão um tanto abreviada, excluindo os recursos de teste. Portanto, a hierarquia de diretórios padrão do Maven se parece com isso:

src/principal/java códigos-fonte de classes e bibliotecas de aplicativos de acordo com a hierarquia de pacotes geralmente aceita
origem/principal/recursos arquivos de recursos de aplicativos: configurações de banco de dados, arquivos de localização, etc.
src/main/webapp recursos de aplicativos da web (arquivos JSP, arquivos de texto, scripts, etc.)

Como você pode ver, ele difere significativamente da estrutura do arquivo WAR que você conhece. Mas o que realmente acontece ao compilar um aplicativo da web é simplesmente mover e concatenar arquivos na estrutura definida na especificação Java EE.

O diretório src/main/webapp define a raiz de contexto do aplicativo da web (quando implantado em um servidor, a raiz de contexto é igual ao nome do arquivo WAR) e já contém o diretório WEB-INF dentro dele. Ou seja, o conteúdo de src/main/webapp é totalmente transferido para a aplicação web.

Todas as suas classes Java são compiladas em arquivos de classe e, mantendo sua estrutura de pacote, são movidas para o diretório /WEB-INF/classes/ . Os JARs das bibliotecas incluídas, que são definidas nas dependências pom.xml do Maven conforme definimos acima, são movidos para o diretório /WEB-INF/lib/ .

Os recursos do aplicativo src/main/resources são movidos para o classpath do aplicativo, especificamente para o mesmo diretório /WEB-INF/classes/ .

Para deixar tudo bem claro, observe este diagrama, que ajudará você a entender como e o que vai para onde ao construir um projeto:

dispositivo de arquivo de guerra