[RESOLVIDO]response.sendRedirect não funciona dentro do método doPost do servlet

O comando: response.sendRedirect(“index.jsp”); não está funcionando, ou seja, não retorna p a pag index.

Segue codigo do Servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
          try {
             PrintWriter out = response.getWriter();
             String cmd = request.getParameter("cmd");
          if (cmd.equalsIgnoreCase("cadastro")){
            contato.setNome(request.getParameter("nome"));
            contato.setLogin(request.getParameter("login"));
            contato.setSenha(request.getParameter("senha"));
            //chamando o metodo salvar, passando o obj
            contato2.salvar(contato);
            response.sendRedirect("index.jsp");
         }
        } catch (NumberFormatException e) {
          
        }
    }

Persisto os dados com o hibernate mas depois não retorna para a página index. Já tentei diversas soluções.

Já tentou utilizar assim?

[code]protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
try {
PrintWriter out = response.getWriter();
String cmd = request.getParameter(“cmd”);
if (cmd.equalsIgnoreCase(“cadastro”)){
contato.setNome(request.getParameter(“nome”));
contato.setLogin(request.getParameter(“login”));
contato.setSenha(request.getParameter(“senha”));
//chamando o metodo salvar, passando o obj
contato2.salvar(contato);
response.sendRedirect("/index.jsp"); //usar /index.jsp
}
} catch (NumberFormatException e) {

    }   
}  [/code]

Outra questão o sistema ela ta persistindo certinho no banco de dados?

Se o problema for o response.redirect tenta usa esse comando

[code]protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
try {
PrintWriter out = response.getWriter();
String cmd = request.getParameter(“cmd”);
if (cmd.equalsIgnoreCase(“cadastro”)){
contato.setNome(request.getParameter(“nome”));
contato.setLogin(request.getParameter(“login”));
contato.setSenha(request.getParameter(“senha”));
//chamando o metodo salvar, passando o obj
contato2.salvar(contato);
RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp");
dispatcher.forward( request, response );

     }     
    } catch (NumberFormatException e) {     
           
    }     
}[/code]

Após o sendRedirect, não acontece nada?

Tente isso:

response.sendRedirect(request.getContextPath()+"/index.jsp");

Não use forward após salvar o registro.

[quote=rogelgarcia]Tente isso:

response.sendRedirect(request.getContextPath()+"/index.jsp");

Não use forward após salvar o registro.[/quote]

amigo, não sei o pq não funciona, já tentei tudo que vcs falaram e nada. Ta persistindo normal no banco, inclusive estou usando esse comando acima no metodo processRequest e tá funcionando. Segue código:

 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            String cmd = request.getParameter("cmd");
            if(cmd.equalsIgnoreCase("apagar")){
               contato.setIdusuario(Integer.parseInt(request.getParameter("idusuario")));
               contato2.excluir(contato);
               response.sendRedirect("index.jsp");   //ESTA FUNCIONANDO
            }
        } finally {
            out.close();
        }
    } 

protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
          try {
             PrintWriter out = response.getWriter();
             String cmd = request.getParameter("cmd");
          if (cmd.equalsIgnoreCase("cadastro")){
            contato.setNome(request.getParameter("nome"));
            contato.setLogin(request.getParameter("login"));
            contato.setSenha(request.getParameter("senha"));
            //chamando o metodo salvar, passando o obj
            contato2.salvar(contato);
            //RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp");
            //dispatcher.forward( request, response );
            response.sendRedirect(request.getContextPath()+"/index.jsp");  //NAO ESTA FUNCIONANDO
            //response.sendRedirect("index.jsp");                                       //NAO ESTA FUNCIONANDO
         }
        } catch (NumberFormatException e) {
          
        }
    }

Não sei pq não funciona. Obrigado pela ajuda!

Isso, não acontece nada!!!

Não sei pq não funciona, já tentei tudo que vcs falaram e nada. Ta persistindo normal no banco, inclusive estou usando esse comando acima no metodo processRequest e tá funcionando. Segue código:

 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            String cmd = request.getParameter("cmd");
            if(cmd.equalsIgnoreCase("apagar")){
               contato.setIdusuario(Integer.parseInt(request.getParameter("idusuario")));
               contato2.excluir(contato);
               response.sendRedirect("index.jsp");   //ESTA FUNCIONANDO
            }
        } finally {
            out.close();
        }
    } 

protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
          try {
             PrintWriter out = response.getWriter();
             String cmd = request.getParameter("cmd");
          if (cmd.equalsIgnoreCase("cadastro")){
            contato.setNome(request.getParameter("nome"));
            contato.setLogin(request.getParameter("login"));
            contato.setSenha(request.getParameter("senha"));
            //chamando o metodo salvar, passando o obj
            contato2.salvar(contato);
            //RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp");
            //dispatcher.forward( request, response );
            response.sendRedirect(request.getContextPath()+"/index.jsp");  //NAO ESTA FUNCIONANDO
            //response.sendRedirect("index.jsp");                                       //NAO ESTA FUNCIONANDO
         }
        } catch (NumberFormatException e) {
          
        }
    }

Não sei pq não funciona. Obrigado pela ajuda!

Se não vai fazer nada com o objeto out nem mexa nele… nem pegue sua referência pelo response.getWriter
Fiquei um pouco cismado se esse close() não estaria impedindo o envio da resposta de REDIRECT.

E mais uma dica: procure uma boa ferramenta de diagnóstico do browser (por exemplo, Firebug ou Developer Tools do IE9). Elas costumam ter uma aba “Network” onde você monitora as requisições; veja se o POST retornou com o status de redirect (status 302 - MOVED, algo assim…) , e a URL de redirecionamento correta.

[quote=gomesrod]Se não vai fazer nada com o objeto out nem mexa nele… nem pegue sua referência pelo response.getWriter
Fiquei um pouco cismado se esse close() não estaria impedindo o envio da resposta de REDIRECT.

E mais uma dica: procure uma boa ferramenta de diagnóstico do browser (por exemplo, Firebug ou Developer Tools do IE9). Elas costumam ter uma aba “Network” onde você monitora as requisições; veja se o POST retornou com o status de redirect (status 302 - MOVED, algo assim…) , e a URL de redirecionamento correta.[/quote]

Bingo!!! É isso mesmo, o o método close() tá impedindo o Redirect.

Obrigado a todos e em especial ao gomesrod.