Por que não utilizamos a (/) para fazer um redirecionamento . response.sendRedirect("listaEmpresas");
Por que não utilizamos a (/) para fazer um redirecionamento . response.sendRedirect("listaEmpresas");
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 norequest.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.
Espero ter esclarecido sua dúvida. Se algum ponto ainda não ficou claro é só avisar!
Abraços e bons estudos!!