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

8 respostas
M

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.

8 Respostas

R
Já tentou utilizar assim?
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) {   
             
        }   
    }
Outra questão o sistema ela ta persistindo certinho no banco de dados?
R

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

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) {     
               
        }     
    }
H

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

R

Tente isso:

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

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

M

rogelgarcia:
Tente isso:

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

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

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!

M

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!

G

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.

M

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.

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

Obrigado a todos e em especial ao gomesrod.

Criado 27 de setembro de 2012
Ultima resposta 28 de set. de 2012
Respostas 8
Participantes 5