Phantom Requests

1 resposta
M
Prezados amigos do GUJ, Mais uma vez estou aqui para solicitar a ajuda do pessoal do GUJ! Na empresa onde trabalho, estamos desenvolvendo uma aplicação com Servlets. Os servlets são implementados com um metodo "processRequest()", que é chamado pelo "doPost()" e "doGet()" (aquela solução duvidosa nas que é default do Netbeans. O processRequest(), por sua vez, possui, via de regra, um switch que dispara métodos de acordo com o valor de uma variável mandada como parte do "querystring" ou por "post". Este método (que a gente pode chamar de "getDownToTheBusiness()") faz o que tem de fazer e executa chama o método forward de um objeto "RequestDispacher()", normalmente direcionando para um JSP ou outro Servlet. Depurando nosso código percebemos, para nossa surpresa, que, às vezes, após executar o processo corretamente, o Servlet se comporta como se houvesse recebido outro request (que não ocorreu) e refaz o processo novamente (as variáveis do request são apagadas). Na esperança de encontrar a razão (e consequente solução) para o problema, vasculhamos os JSps, filtros etc, mas não conseguimos encontrar o "culpado". Abaixo um trecho de um dos processRequest() que apresentam este problema, O código é bem simples, todos os aspectos são implementados na mesma classe e não existem frameworks.
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      Connection con = null;
      Boolean erro = false;
      try {
         con = new Conexao().getCon();
         Usuario usuario = (Usuario) request.getSession().getAttribute("usuario");
         FerramentaPerfil ferramentaPerfil = new FerramentaPerfil();
         ferramentaPerfil.setPerfil(usuario.getPerfil());
         ferramentaPerfil.setFerramenta(new Ferramenta(6));
         ferramentaPerfil.setInst(usuario.getInstituicao());

         ferramentaPerfil = new FerramentaPerfilDao(con).buscarPorFerramentaEPerfil(ferramentaPerfil).get(0);
         if ((ferramentaPerfil.getNivel() < 2)) {
            throw new Exception();
         } else {
            request.setAttribute("permissaoFerramenta", ferramentaPerfil.getNivel());
            request.setAttribute("codFerramenta", ferramentaPerfil.getFerramenta().getCodigo());
         }
      } catch (Exception exception) {
         erro = true;
         String cod_suporte = "27.2";
         String volta = "ctrlprincipal";
         String location = "mensagens.jsp?erro=" + MensagemXML.buscarMensagem("MENSAGEM_SUPORTE", request) + " " + cod_suporte + "&volta=" + volta;
         new TratamentoDeErro("Erro ao buscar permissão do usuário.", exception, request, this.getClass().getName(), "", cod_suporte);
         request.getRequestDispatcher(location).forward(request, response);
      } finally {
         try {
            con.close();
         } catch (Exception e) {
            e.printStackTrace();
         }
      }
      /* fim da verificacao de permissao  */
      if (!erro) {
         int op = 0;
         try {
            op = Integer.parseInt(request.getParameter("op"));
            switch (op) {
               case 1:
                  exibirOpcoesPerfil(request, response);
                  break;
               case 2:
                  exibirFormularioDados(request, response);
                  break;
               case 3:
                  alterarFotoEDescricao(request, response); // altera foto e descricao do perfil
                  break;
               case 4:
                  alterarUsuario(request, response); // altera os dados do usuario
                  break;
               case 5:
                  alterarSenha(request, response);
                  break;
               case 6:
                  exibirPerfil(request, response);
                  break;
               case 7:
                  exibirFormularioSenha(request, response);
                  break;
               case 8:
                  exibirFormularioFoto(request, response);
                  break;
            }
         } catch (Exception exception) {
            String cod_suporte = "27.1";
            String volta = "ctrlprincipal";
            request.getRequestDispatcher(new FacadeMetodos().erro(request, cod_suporte, volta, "Erro ao rotear op", exception, this.getClass().getName())).forward(request, response);
         }
      } else {
         String url = "mensagens.jsp?erro=" + MensagemXML.buscarMensagem("SEM_ACESSO", request) + "&volta=ctrlprincipal";
         request.getRequestDispatcher(url).forward(request, response);
      }
   }

Caso Careçam de maiores explicações, é só falar!!!
Conto com vocês!
Já grato, sou
MaLSan

1 Resposta

M

E aí, galera?! Alugém tem alguma idéia?

Criado 28 de julho de 2009
Ultima resposta 29 de jul. de 2009
Respostas 1
Participantes 1