Duvida jsp servlets recarregar pagina sem executar tudo dnovo

bom galera to com o seguinte problema

to fazendo uma aplicação pra web que cadastra produtos e lista produtos

ta tudo funcionando so q c aperto f5 ele executa o cadastro denovo queria saber c tem como impedir issu

na tabela q exibe os dados cadastrados coloquei um link para exclusao de registros que envia a açao excluir para o servlet controlador
que chama a classe de logica
na classe de logica ele executa a logica criando objeto produto e o dao para executar o drop no banco
depois redireciona para o servlet controlador passando a nova açao no caso listar

porem pelos prints no conssole do ide da pra ver q ele antes de listar os produtos tenta exluir novamente os produtos

controlador


    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        String acao = request.getParameter("acao");
        String nomeDaClasse = "controle."+acao+"Logic";
        
        String url = DEFALT;

        try {
               
                Class classe = Class.forName(nomeDaClasse);

                 Logica logica = (Logica) classe.newInstance();
                  
                 url = logica.executa(request, response);              
                
                request.getRequestDispatcher(url).forward(request, response);
 
        }catch (Exception e) {
            throw new ServerException(e.getClass().getName(), e);
            
        }

       
    } 

logica

 public String executa(HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        boolean sucesso = false;
        String url = "exibelista.jsp";

        //pega conecçao do request criada no filtro
        Connection conn = (Connection) request.getAttribute("conn");
        
        // pega o array do request q o formulario enviou
        String[] list_idproduto = request.getParameterValues("list_idproduto");

          // se for uma exclusão em massa executa o loop de exlusões
          if(list_idproduto != null){

              ProdutoDAO prodDAO = new ProdutoDAO(conn);

              for (String i : list_idproduto) {
                    System.out.println("#### Excluindo id: "+i+"...#####");

                    //logica normal i = ao idproduto dentro do array
                    int id = Integer.parseInt(i);
                    Produto prod = new Produto();
                    prod.setIdproduto(id);

                    sucesso = prodDAO.deleteProduto(prod);

                    System.out.println("#### Exclusao concluida id: "+i+"removido#####");
               }
          //se nao executa a exclusão unica
          }else{

            int id = Integer.parseInt(request.getParameter("idproduto"));

                Produto prod = new Produto();
                    prod.setIdproduto(id);

                ProdutoDAO prodDAO = new ProdutoDAO(conn);
                sucesso = prodDAO.deleteProduto(prod);

          }

        //verifica se tudo correu bem  redireciona de acordo com
        //o status de sucesso
            if(sucesso){
                request.removeAttribute("acao");
                request.removeAttribute("Excluir");
                request.setAttribute("acao", "Listar");               


                url = "Controlle?acao=Listar";
            
            }else{
                request.removeAttribute("acao");
                request.removeAttribute("Excluir");
                request.setAttribute("erro", LOG);
                url = ERRO;
            }

            return url;
    }

ngm?
aproveitando o topico ta legal a formação dos metodos ou tem algo q pode ser melhorado?

Provavelmente na ação de cadastro de produtos, vc testa se o produto existe e exclui ele caso exista e depois cadastra ele.
Suponho que seja este o seu problema.

OBS: Vc só postou o código de exclusão de produtos. Se este não for o teu problema posta a ação de cadastro de produtos e rescreva a duvida de maneira mais clara, ficou um pouco confuso ( acho que tem até um erro de escrita “na tabela q exibe” creio que era “na tela q exibe”).

A formação dos metodos utilizando este padrão de projeto que vc esta utilizando esta legal, só tem outras observações.

1)Vc pode melhorar o teu front controller, não declarando a variavel ação, pois não utiliza ele a não ser para compor o nomeDaClasse.

String nomeDaClasse = "controle."+request.getParameter("acao")+"Logic";  

[i]2)Vc pode alterar o nome da tua interface Logic para Action pois pelo visto esta utilizando o padrão de projeto ActionCommand

3)Não é necessário excluir um atributo quando vc vai altera-lo pois se o atributo existir na requisição ele sera “substituido”.

4)A conversão para inteiro sua sem estar em um try faria que o usuario não fosse redirecionado para a pagina de erro que vc quer.[/i]

5)Não sei se vc tem uma pagina de erro generica declarada no deployment descriptor (web.xml), se não tiver declare.

ai classe de cadastro esta aki.


  public String executa(HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        String url = "cadastro.jsp";
        boolean sucesso;

        //pega conecçao do request criada no filtro
        Connection conn = (Connection) request.getAttribute("conn");

        String nome_produto = request.getParameter("nome_produto");
        String departamento = request.getParameter("departamento");
        float valor_unitario = Float.parseFloat(request.getParameter("valor_unitario"));
        String data_texto = request.getParameter("data_validade");
        Calendar data_validade = null;

        try{
        Date date = new SimpleDateFormat("dd/MM/yyyy").parse(data_texto);
        data_validade = Calendar.getInstance();
        data_validade.setTime(date);
        
        }catch(ParseException e){
            throw new ServletException("valor de data invalido"+e);
        }

        Produto prod = new Produto();
            prod.setNome_produto(nome_produto);
            prod.setDepartamento(departamento);
            prod.setValor_unitario(valor_unitario);            
            prod.setData_lancamento(Calendar.getInstance());
            prod.setData_validade(data_validade);
            
        ProdutoDAO prodDAO = new ProdutoDAO(conn);
            sucesso = prodDAO.addProduto(prod);
            

            if(sucesso){
                request.setAttribute("funcao", FUNCAO);
                request.setAttribute("produto", prod);
                url = EXIBE_CADASTRO;
            }else{              
                request.setAttribute("erro", LOG);
                url = ERRO;
            }
                    
            return url;
    }

eu fiz a exlusao do atributo para ver se resolvia o problema ja removi essa parte do fonte aki

sobre o try catch vo circular as converssões bem lembrado
por enquanto inda n declarei a pagina de erro to redirecionando pelo dispacher para uma erro generica q recebe o log junto

valew pelas dicas rafael