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

Dúvida sendRedirect

Por que não utilizamos a (/) para fazer um redirecionamento . response.sendRedirect("listaEmpresas");

1 resposta
solução!

Olá Victor, tudo bem com você?

Isso acontece por conta do caminho relativo do recurso/local que você quer acessar.

Caminho relativo parte do local onde você está no momento ou a partir de algum local fornecido.

Em nosso contexto, o cliente irá lidar com o caminho completo dos locais acessados. Ou seja, ele verá todo o caminho das URL até chegar onde ele quer (http://localhost:8080/gerenciador/listaEmpresas). Nós também podemos usar o caminho completo quando formos despachar ou redirecionar nossas requisições e respostas, mas não é muito prático já que toda vez teríamos escrever a URL inteira.

Sabendo disso, usamos o caminho relativo no lugar do absoluto para facilitar a nossa vida. O caminho relativo, por sua vez, pode vir com ou sem a barra (/) antes do recurso que queremos acessar. Quando colocamos a barra antes do nome, estamos dizendo que o recurso que queremos acessar é relativo à raiz do web container, que no nosso caso é o localhost:8080. Caso contrário, se deixarmos sem a barra, estaremos acessando um recurso cuja localização é relativa ao local onde estamos no momento. Vamos a um exemplo para deixar essa diferença mais clara:

  • Caminho relativo com barra
    • response.sendRedirect("/listaEmpresas")

Nesse primeiro caso, estamos partindo da raiz do web container, o que significa que a URL completa que será gerada no final da requisição será algo como http://localhost:8080/listaEmpresas. Perceba que agora não estamos nem mesmo dentro do nosso gerenciador!

  • Caminho relativo sem barra
    • response.sendRedirect("listaEmpresas")

Agora, se deixarmos sem a barra, o nossa URL completa será gerada a partir do local onde estamos. Em outras palavras, o trecho da URL que vem antes da nossa localização ficará prefixado e qualquer que seja o recurso que queremos acessar deverá estar no mesmo local que o recurso original:

http://localhost:8080/gerenciador/ --> prefixado

Ou seja, como estamos partindo de RemoveEmpresaServlet.java e queremos redirecionar nossa resposta para o ListaEmpresasServlet.java, e ambos os recursos estão no mesmo local, podemos ignorar a barra antes do nome! Deixando a URL completa como http://localhost:8080/gerenciador/listaEmpresas, da forma como queremos!

Observação

Como eu mencionei anteriormente, o uso da barra no response.sendRedirect() se refere à raiz do web container (localhost:8080). Porém, o uso da barra no request.getRequestDispatcher() se refere à raiz do contexto corrente (servlet corrente), que nesse caso é a nossa web app gerenciador. Portanto, nesse caso caso em específico, não precisamos da barra para despachar as requisições, pois todo mundo está dentro do gerenciador.

  • response.sendRedirect(String location)

Imgur

  • request.getRequestDispatcher(String path)

Imgur

Espero ter esclarecido sua dúvida. Se algum ponto ainda não ficou claro é só avisar!

Abraços e bons estudos!!