Estrutura de Diretórios para Projetos Web em Java

A estrutura de diretórios de um projeto Web em Java pode ser categorizada em dois tipos principais: a estrutura de publicação (deployement) e a estrutura de compilação (development). A estrutura de publicação segue um padrão unificado definido pelos contêineres Servlet para carregar a aplicação Web. A estrutura de compilação, por outro lado, varia de acordo com a ferramenta de build utilizada (como Maven ou Gradle) e é uma representação temporária que é transformada na estrutura final de publicação.

Estrutura de Publicação

Esta é a estrutura final que é efetivamente executada pelo servidor de aplicação. Um exemplo típico é mostrado abaixo:

meuapp
├── pagina.html
├── outroDiretorio
│   ├── arquivo.css
│   └── imagem.png
├── WEB-INF
│   ├── web.xml
│   ├── classes
│   │   └── com
│   │       └── minhaempresa
│   │           └── MinhaClasse.class
│   └── lib
│       └── biblioteca-dependencia.jar
└── META-INF
    └── MANIFEST.MF

Esta estrutura pode ser dividida em several partes componentes:

  • Recursos Estáticos: Incluem arquivos como HTML, CSS, JavaScript, imagens (PNG, JPG) e páginas JSP. Estes ficam acessíveis diretamente. Por exemplo, pagina.html pode ser acessada via http://dominio:porta/meuapp/pagina.html.
  • Arquivo de Configuração da Aplicação (web.xml): Localizado dentro de WEB-INF, é o descritor de implantação principal. Ele configura parâmetros do contexto, páginas iniciais, filtros, ouvintes e mapeia Servlets. Um exemplo simplificado:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         version="4.0">

    <display-name>Minha Aplicação</display-name>

    <context-param>
        <param-name>ambiente</param-name>
        <param-value>producao</param-value>
    </context-param>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>ControladorPrincipal</servlet-name>
        <servlet-class>com.minhaempresa.ControladorServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>ControladorPrincipal</servlet-name>
        <url-pattern>/acao/*</url-pattern>
    </servlet-mapping>
</web-app>

  • Código Executável e Dependências: A lógica da aplicação reside em dois locais:
    • WEB-INF/lib/: contém as bibliotecas JAR de terceiros (dependências).
    • WEB-INF/classes/: contém as classes compiladas do projeto. O carregador de classes busca primeiro em lib e depois em classes.
  • Metadados de Publicação: O arquivo META-INF/MANIFEST.MF contém informações de versão geradas durante o processo de build.

Estrutura de Compilação (Desenvolvimento)

A organização dos arquivos fonte durante o desenvolvimento depende da ferramenta. Abaixo estão duas estruturas comuns.

1. Projeto Web Dinâmico (Eclipse/IDE)

IDEs como o Eclipse frequentemente usam esta estrutura padrão:

meuapp-projeto
├── src
│   └── com
│       └── minhaempresa
│           └── MinhaClasse.java
└── WebContent
    ├── pagina.html
    ├── WEB-INF
    │   ├── web.xml
    │   └── lib
    └── META-INF

Aqui, src contém o código fonte Java, e WebContent corresponde à raiz da aplicação publicada. O mapeamento entre essas pastas e a estrutura de publicação pode ser configurado nas propriedades do projeto (ex: Deployment Assembly no Eclipse).

2. Estrutura Maven

O Maven segue uma convenção de diretórios bem definida que simplifica a gestão de dependências e o processo de build:

meuapp-maven
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com/minhaempresa/MinhaClasse.java
│   │   ├── resources
│   │   │   └── configuracao.properties
│   │   └── webapp
│   │       ├── pagina.jsp
│   │       └── WEB-INF
│   │           └── web.xml
│   └── test
├── target   (gerado pelo Maven)
└── pom.xml

O arquivo pom.xml gerencia todas as dependências e o ciclo de vida do projeto. O mapeamento padrão para publicação é:

  • src/main/javaWEB-INF/classes
  • src/main/resourcesWEB-INF/classes
  • src/main/webapp → raiz da aplicação (/)
  • src/main/webapp/WEB-INF/web.xmlWEB-INF/web.xml
  • Dependências do Maven → WEB-INF/lib

Tags: servlet Web.xml maven Eclipse diretorio-web-java

Publicado em 6-20 20:04