A resposta usual para "qual é o caminho certo?" ou "este é o caminho certo?" é ... depende .
Tudo o que posso fazer é contar os prós e os contras de idéias específicas. O que se segue é 100% da minha opinião. Não conheço nenhum requisito ou regra específica. Tenho certeza que alguém vai discordar de mim.
JSP's
Vamos trabalhar para colocar JSPs no WEB-INF ou não.
Prós de colocar JSP's no WEB-INF:
- Você controla como as JSPs são executadas. Se você deseja que um JSP seja parametrizado e reutilizável (o que é realmente difícil com um JSP de qualquer maneira), você pode colocá-los no WEB-INF e usar um servlet ou um controlador de ação Struts ou outro controlador frontal para fazer o pré-processamento e depois passe o controle para o JSP, passando no contexto certo do ambiente (como atributos de solicitação, quaisquer verificações de segurança, saneamento de parâmetros etc.)
- Você pode programar ou mesmo em um nível de firewall ou IDS bloquear solicitações HTTP para * .jsp para reduzir a probabilidade de alguém fazer upload de um JSP na raiz da web e, em seguida, poder executar o código como servidor da web. Eles teriam que sobrescrever um JSP existente. Não é um enorme ganho de segurança, mas dificulta um pouco o comprometimento.
- Aplica bons hábitos, como MVC, controlador frontal, filtros de servlet, injeção de dependência, etc., em oposição a um grande JSP monstruoso que faz todo o trabalho em si e é difícil de ler / manter.
Contras de colocar JSPs no WEB-INF:
- Você não pode acessar a página diretamente, mesmo que seja uma página autônoma simples que não precise de processamento inicial. Isso ocorre porque os arquivos em / WEB-INF não podem ser servidos por um contêiner de servlet.
Arquivos estáticos
Em termos de arquivos puramente estáticos, como HTML, imagem, folha de estilo, javascript, etc., coloque-os na raiz da web (my_app no seu caso), mas NOT / WEB-INF (porque não é acessível).
Layout geral
Quanto ao layout geral do diretório, isso depende um pouco do seu processo de criação. Eu gosto de armazenar tudo em "src" ou "source" porque deixa claro quais arquivos são gerados pela construção e quais são arquivos de origem puros. main
permite separar o código de teste, como as classes junit, do código-fonte principal, o que também é bom. Mas se você não tiver nenhum teste de unidade (oh não!), É uma distinção sem sentido.
Por outro lado, se você não manipular a raiz da web durante a compilação (como se fosse todos os arquivos JSP e estáticos), talvez você a mantenha no nível superior, como /webroot
ou /deploy
copie os arquivos conforme necessário, como arquivos .class ou .jar. É um hábito de seres humanos (especialmente desenvolvedores) se organizarem demais. Um bom sinal de excesso de organização é ter muitas pastas com apenas uma única subpasta.
O que você mostrou
Você indicou que está seguindo uma convenção definida pelo maven, portanto, se você já estiver usando o maven, fique com esse layout. Não há absolutamente nada de errado com o layout que você descreveu.