Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como eu faria para servir páginas estáticas HTML usando o mapeamento "/"

Estou com uma dúvida, como eu faria para servir páginas estáticas HTML, usando o mapeamento "/" ? Tentei implementar a seguinte estrutura que segue:

Note que meus arquivos estão fora do WEB-INF, Ok, e meu web.xml está assim:

Bom, com base no meu web.xml, meu filtro de autorização é o primeiro a interceptar qualquer requisição, a estrutura de controle está da seguinte forma:

Algumas considerações antes de partir para as dúvidas, estou usando o maven para "buildar" o projeto, faço o build com mvn clean install. dentro do meu pom.xml existe uma linha responsável por sempre enviar o novo .war compilado para a pasta webapps do tomcat, na instrução <outputDirectory> como segue:

Ok até aqui, a aplicação sobe normalmente, o tomcat reconhece o novo .war, e o atualiza. Como estou no linux, e estou me arriscando desenvolver java web no vscode, utilizei um binário do linux tail para acompanhar o .log de saída do tomcat, inserindo as atualizações no final de um arquivo out.log, tudo com o seguinte comando:

Então, toda vez que é dado o comando mvn clean install ou mvn install, o novo arquivo é enviado e o tomcat retorna três linhas:

  • faz o "Undeploying" da aplicação antiga.
  • e depois faz o "Deploying" do novo .war.

1 - A primeira dúvida que tenho. Mesmo eu querendo trabalhar com arquivos .html no padrão MVC, eu tenho que mantelos dentro de WEB-INF e permitir que os mesmos sejam acessados somente pelos servlets?

2 - Misteriosamente, toda vez que executo a aplicação, mesmo sem definir nada no web.xml, o meu AuthorizationFilter, que é o meu primeiro filtro, recebe a requisição do index.html, para saber disso, deixei meu AuthorizationFilter da seguinte forma:

Como chain.doFilter(req, resp); está comentado, nada acontece depois dele, ao acessar a aplicação no navegador, com http://localhost:8080/goimob/ recebo a seguinte resposta:

Ou seja, meu tomcat (não sei ao certo se é padrão do tomcat), faz a requisição de index.html, e meu filtro com mapeamento <url-pattern>/*</url-pattern> caputra isso, por consequência, não tenho meu arquivo devolvido ao navegador.

Então, como impedir que meus filtros/servlets, interceptem requisições de páginas estáticas? ou então, devo seguir o padrão MVC, e devolver meus HTMLs apenas atráves de request.getRequestDispatcher("index.html").forward(request, response); por exemplo? mas ai teria outro problema, percebi que meu index.html, quando é carregado para o navegador, faz com que ele realize novas requisições de recursos, e o filtro também intercepta essa requisições. Desativei o mapping do meu ControllerFilter:

E, ativei uma linha do meu AuthorizationFilter:

Dessa forma, meu primeiro interceptador AuthorizationFilter, deixa a requisição "rolar". Limpando meu log.out, gerando um novo .war e acessando novamente, http://localhost:8080/goimob/ com uma nova sessão, agora percebo que após o arquivo index.html ser carregado, o navegador faz requisições dos arquivos declarados no HTML, e meu filtro/servlet também intercepta isso, o que seria um problema se meu ControllerFilter tentasse instanciar coisas como /index.html ou /style.css... Meu arquivo index:

Meu log:

Dito tudo isso, qual é a arquitetura correta?, devo deixar meus arquivos estáticos (HTML) dentro ou fora do meu WEB-INF? se dentro, do WEB-INF obrigatóriamente as requisições feitas pelo navedor por assets e contéudos para montar a página passaria pelo filtro/servlet correto?, se passar, como fazer com que meu filtro não tente instância-los como se fosse os actions? Repósitorio do projeto, eu sou responsável pelo BackEnd. Tenho ainda mais dúvidas, mas cheguei no limite de 5k caracteres.

1 resposta
solução!

help me )-;