Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Relação Servlet x JSP

Oi, pessoal! Na aula 04, "Páginas dinâmicas com JSP", no final da atividade 02, "Primeiro JSP", no navegador o professor entrou explicitamente na página do JSP (pela barra de endereços) "/novaEmpresaCriada.jsp" (e foi exibida a mensagem "Empresa Alura cadastrada com sucesso!"). Até aí, tudo bem! O estranho é que também no final do vídeo seguinte, que foi a atividade 06, "Despachando a requisição", o professor, à partir do servlet "NovaEmpresaServlet.java" (mapeamento de URL "/novaEmpresa") chama o JSP "novaEmpresaCriada.jsp" e, mesmo chamando o JSP, o que é mostrado no navegador é ainda o servlet (note na barra de endereços), mas repare que desta vez é o servlet exibindo o conteúdo do JSP. É como se o servlet apenas puxasse o conteúdo do JSP para dentro de si e o exibisse.

2 respostas
solução!

Ola Felipe.

Então isso é pela diferença das abordagens do forward e redirect.

Assim, no forward a servlet indica ao container web (o tomcat) qual pagina ou endereço interno ele deve percorrer. Como é uma "conversa" entre a servlet e o servidor java, você pode indica-lo para um caminho de pagina que esteja dentro do WEB-INF, que será alcançado com sucesso. Após ler o arquivo com sucesso, o servidor faz 1 response ao navegador com aquele conteúdo. Assim a URL inicial da request se mantem no navegador, mesmo ter direcionado a uma pagina diferente na resposta, no caso mantendo a nova empresa.

Já no redirect a servlet indica um endereço externo, pois ela já cria 1 response ao navegador com status http 302. O navegador ao receber esse retorno com esse status, automaticamente cria uma nova request para o endereço indicado, que após processar no servidor java, faz um segundo response com o conteúdo. Dessa forma é impossível no redirect indicar um arquivo dentro do WEB-INF, pois o navegador ao tentar acessá-lo não iria conseguir. Assim a URL muda para a ultima resposta, no caso, a pagina de sucesso.

Forward: Servlet --> WebContainer --> Response ao navegador

Redirect: Servlet --> Primeira response ao navegador URL e status http 302 --> Navegador automaticamente cria request na URL --> WebContainer --> Segunda response ao navegador

Entendi. Obrigado, JP!