RequestDispatcher e response.sendRedirect

2 respostas
W

Estou desenvolvendo uma aplicação web simples apenas com jsp, servlets e mysql, onde uso as servlets como controle e estou tendo dificuldades para fazer o redirecionamento de paginas das servlets para as paginas jsps.

Comecei usando o response.sendRedirect que a principio atendia as minhas necessidades mas percebi que com ele eu não poderia usar o request.setAtribute, dai vi que tinha que usar o RequestDispatcher, foi onde as coisas complicaram por que ele faz o redirecionamento mas quando chega na pagina ela é exibida mas na url ele ainda contiunua mostrando a url da servlet ai da problemas de referencias com links, css, etc…

Vou exemplificar pra ficar mais claro:

Usando response.sendRedirect fica assim:

tenho um link

http://localhost:8084/tcc/UsuarioControle?acao=listar

Ai na servlet UsuarioControle recebe assim:

if (acao.equals("listar")) {
      List<Usuario> lista = dao.pesquisaUsuario();
      request.setAttribute("listaUsuario", lista);
      RequestDispatcher rd = request.getRequestDispatcher("paginas/usuario/lista_usuarios.jsp");
      rd.forward(request,response);
}

Ai na url fica assim:

http://localhost:8084/tcc/UsuarioControle?acao=listar

Mas já está sendo exibida a pagina lista_usuarios.jsp sendo que na url ainda mostra UsuarioControle, ai os links ficam errados, o que não acontece com response.sendRedirect.

Alguem pode me ajudar?

2 Respostas

V

meu velho, o RequestDispatcher vai redirecionar para você para aonde você atribuiu, qual .jsp quer.

Por exemplo, suponha que vim da .jsp cadastro.jsp devido um form que lançou, então na minha servlet ficará:

... operações realizadas
        RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");
        rd.forward(request, response);

Aqui vai redirecionar para a .jsp index.jsp, entendeu ?
Não importa de onde ela veio, mas sim para aonde você irá redirecionar.

M

Boa tarde wagne23,

Não está errado não. É isto mesmo, o RequestDispatcher não faz uma requisição nova, apenas redireciona a anterior, por isso a url não muda.
O response.sendRedirect faz uma solicitação nova, por isso não passa os atributos que você colocou anteriormente.

Creio que você não terá problemas com url se utilizar o request.getContextPath() para recuperar a raiz de contexto da aplicação ou, em último caso, utilizar a url absoluta onde for necessário.

Valeu irmãozinho!

Criado 28 de março de 2011
Ultima resposta 17 de fev. de 2012
Respostas 2
Participantes 3