Tenho uma tela de cadastro simples que chama uma servlet através de um método post. Na servlet
o método doPost faz o seu trabalho e termino o método com esse carinha abaixo:
RequestDispatcher rd = request.getRequestDispatcher("/contato-adicionado.jsp");
rd.forward(request,response);
Nada surpreendente ate aqui… porem quando atualizo a pagina “contato-adicionado.jsp” no browser o form da pagina de cadastro é reenviado e cadastro é feito novamente.
É possível modificar este comportamento?
Agradeço desde já!
freakazoid,
Esse é o comportamento esperado quando você utiliza o comando:
RequestDispatcher rd = request.getRequestDispatcher("/contato-adicionado.jsp");
rd.forward(request,response);
Porque o Browser não sabe que aconteceu esse redirecionamento, então se você atualiza a pagina o Browser vai realizar o ultimo request que no caso foi o POST.
Para contornar a situação utilize o comando abaixo, basicamente a diferença entre eles é que no comando abaixo o Browser que faz o redirecionamento e não o servidor conforme dito anteriormente.
Se você reparar a url do seu Browser essa modificação será observada, pois do modo que você esta fazendo a url não será alterada, já no modo que te passe a URL será alterada.
response.sendRedirect("/contato-adicionado.jsp");
Espero que tenha ajudado !
Att,
[quote=magnocosta]freakazoid,
Esse é o comportamento esperado quando você utiliza o comando:
RequestDispatcher rd = request.getRequestDispatcher("/contato-adicionado.jsp");
rd.forward(request,response);
Porque o Browser não sabe que aconteceu esse redirecionamento, então se você atualiza a pagina o Browser vai realizar o ultimo request que no caso foi o POST.
Para contornar a situação utilize o comando abaixo, basicamente a diferença entre eles é que no comando abaixo o Browser que faz o redirecionamento e não o servidor conforme dito anteriormente.
Se você reparar a url do seu Browser essa modificação será observada, pois do modo que você esta fazendo a url não será alterada, já no modo que te passe a URL será alterada.
response.sendRedirect("/contato-adicionado.jsp");
Espero que tenha ajudado !
Att,[/quote]
magnocosta obrigado pela resposta!
substitui o ResquestDispatcher por response.sendRedirect("/contato-adicionado.jsp"), porem a agora recebo 404 na pagina contato-adicionado.jsp javascript:emoticon(’:?’);
Na pagina “contato-adicionado.jsp” deixei apenas uma mensagem de “sucesso” e mesmo assim não funciona.
Alguma ideia?
Segue abaixo o código:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//monta objeto e chama as regras de negocio........
response.sendRedirect("/contato-adicionado.jsp");
}
contato-adicionado.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Contato adicionado com sucesso!
</body>
</html>
A pagina “contato-adicionado.jsp” está dentro de alguma pasta ou está da pasta raiz da aplicação ?
Se ela estiver dentro de alguma pasta essa pasta deve ser adicionada no caminho, como o exemplo abaixo:
RequestDispatcher rd = request.getRequestDispatcher("contato/contato-adicionado.jsp");
rd.forward(request,response);
Att,
Descobri o bug aqui
a ‘/’ do response.sendRedirect("/contato-adicionado.jsp"); que estava atrapalhando…
Bombardeie a contato-adicionado.jsp de F5 e aconteceu aquilo que vc havia dito.
Obrigado pela ajuda!
Abs