Listas se atualizam sozinhas ao apertar F5 ou fechar o browser...muito estranho

5 respostas
U

Ola a todos

Estou tendo um problema com um aplicação WEB que utiliza jakarta-tomcat-5.0.25 Java 5.0 e Mysql.

Essa aplicação acessa o bando de dados e carrega uma Lista com dados oriundos do Banco.

Quando acesso a pagina jsp pela primeira vez os dados aparecem certinho na Lista. Mas se eu apertar o F5 ou fechar a pagina e abrir novamente, as listas duplicam de tamanho, dando a impressão que os dados estão sendo acumulados. O que estou achando mais estranho é que mesmo fechando o Browser a Lista aparece com as informações que eu tinha acessado da ultima vez, ai tenho que derrubar o Tomcat. e quando acesso a primeira vez a pagina após ter reiniciado o Tomcat, ela aparece corretamente.

Não sei se é um erro de lógica ou se é algum parametro na conf do Tomcat.

Alguém poderia me ajudar ?

Segue minhas classes e jsp

Bean:

package br.com.supportnet;

public class Ocorrencia {

private int Idprod;

private String Tipocontato;

private String Tipochamado;

private String Formacontato;

private String Produto;

private String Descricaoclasse;

private String Descricao;

private int Qtd;

private String Uf;

public void setIdprod(int id) {
    Idprod = id;
}

public void setTipocontato(String tipocontato) {
    Tipocontato = tipocontato;
}

public void setTipochamado(String tipochamado) {
    Tipochamado = tipochamado;
}

public void setFormacontato(String formacontato) {
    Formacontato = formacontato;
}

public void setProduto(String produto) {
    Produto = produto;
}

public void setDescricaoclasse(String dsc) {
    Descricaoclasse = dsc;
}

public void setDescricao(String descricao) {
    Descricao = descricao;
}

public void setQtd(int qtd) {
    Qtd = qtd;
}

public void setUf(String uf) {
    Uf = uf;
}

public int getIdProd() {
    return Idprod;
}

public String getTipocontato() {
    return Tipocontato;
}

public String getTipochamado() {
    return Tipochamado;
}

public String getFormacontato() {
    return Formacontato;
}

public String getProduto() {
    return Produto;
}

public String getDc() {
    return Descricaoclasse;
}

public String getD() {
    return Descricao;
}

public int getQtd() {
    return Qtd;
}

public String getUf() {
    return Uf;
}

}

Acessa banco e carrega Lista:

package br.com.supportnet;

import java.util.<em>;

import java.sql.</em>;

/**
*

  • @author wleal
    */
    public class TO
    {

    public static List getChamados()
    
    {
    
    ArrayList chamados = new ArrayList();
    

    String JDBC_DRIVER = “com.mysql.jdbc.Driver”;
    String DATABASE_URL = “jdbc:mysql://localhost:3306/support”;

    Connection  connection = null;
    
    Statement statement = null;
    
    //conecta-se ao banco support e consulta tabela
    
    try 
    {
        Class.forName(JDBC_DRIVER); //carrega classe de driver de banco de dados
    
         //estabelece conexão com o banco
         connection =
          DriverManager.getConnection(DATABASE_URL, "root", "");
          //cria instrução para conectar banco
          statement = connection.createStatement();
          //consulta o banco
          ResultSet resultSet = statement.executeQuery("select tc.tipo_contato as tipo_contato, co.uf, a.forma_contato, p.codigo, p.descricao as Produto, c.nome as Motivo, " +
                     "b.nome as Descricao_motivo, p.descricao_classe, count(a.id_chamado) Qtd " +
                     "from CHAMADO a, TIPO_CHAMADO b, TIPO_CHAMADO c, CONTATO co, TIPO_CONTATO tc, CHAMADO_PRODUTO cp, PRODUTO p " +
                     "where b.id_tipo_chamado = a.id_tipo_chamado and " +
                     "c.id_tipo_chamado = b.id_tipo_pai and " +
                     "a.id_contato = co.id_contato and " +
                     "co.id_tipo_contato = tc.id_tipo_contato and " +
                     "a.id_chamado = cp.id_chamado and " +
                     "cp.codigo = p.codigo and " +
                     "a.data_inc between 20080101 and 20080202 " +
                     "group by b.nome, c.nome, p.descricao, p.descricao_classe, tc.tipo_contato, co.uf");
          ResultSetMetaData metaData = resultSet.getMetaData();
        while (resultSet.next())
           {
                    Ocorrencia Contatos = new Ocorrencia();   
                    
                    Contatos.setTipocontato(resultSet.getString("tipo_contato"));
                    Contatos.setUf(resultSet.getString("uf"));
                    Contatos.setTipochamado(resultSet.getString("Motivo"));
                    Contatos.setFormacontato(resultSet.getString("forma_contato"));
                    Contatos.setProduto(resultSet.getString("Produto"));
                    Contatos.setIdprod(resultSet.getInt("codigo"));
                    Contatos.setDescricaoclasse(resultSet.getString("descricao_classe"));
                    Contatos.setDescricao(resultSet.getString("Descricao_motivo"));
                    Contatos.setQtd(resultSet.getInt("Qtd"));
                    chamados.add(Contatos);
                   
    
                  }//fim do while   
    }//fim do try
       
      catch (SQLException sqlException)
      {
         sqlException.printStackTrace();
         System.exit(1);
      }//fim do catch        
    
      catch (ClassNotFoundException classNotFound)
      {
         classNotFound.printStackTrace();
         System.exit(1);
      }//fim do cacth
      
      finally //assegura que conexao com o banco são fechada corretamente 
      {
        try
        {
          statement.close();
          connection.close();
        } //fim do try 
        
        catch (Exception exception)
        {
          exception.printStackTrace();
          System.exit(1);
          
        }//fim do catch
     }//fim do finall
    

    return chamados;
    }//fim do metodo
    }//fim da classe

trata dados oriundos da classe acima:

package br.com.supportnet;

import java.util.List;

import java.util.ArrayList;

import javax.swing.JOptionPane;

public class OcorrenciaData
{

public static final ArrayList chamados = new ArrayList();

public static ArrayList CasList = new ArrayList();

public static ArrayList AlergiaList = new ArrayList();

public static ArrayList CoreList = new ArrayList();

public static ArrayList ModuloList = new ArrayList();

public static ArrayList PediatricoList = new ArrayList();

public static ArrayList EspecificaList = new ArrayList();

public static ArrayList OralList = new ArrayList();

public static ArrayList MetabolicoList = new ArrayList();

public static ArrayList InstiList = new ArrayList();

//nome do driver jdbc e URL do banco

//carrega aplicativo

public List getMetabolico(List <Ocorrencia> chamados)

{

int metabolico[] = {309071, 9545, 10183, 9520, 1201, 10026, 10029, 10295, 10028, 110971, 110972, 110973, 10161, 10159, 937, 877, 1205, 10282, 10279, 875, 1203, 18687};

  for (Ocorrencia metabolicos : chamados)
  {
      for (int i = 0; i < metabolico.length; i++)
      {
          if (metabolicos.getIdProd() == metabolico[i])
          {
              MetabolicoList.add(metabolicos);
          }//fim do if
      }//fim do for interno
  }//fim do for externos
  return MetabolicoList;

}//fim do metodo getOcorrenciaData.chamados

public List getCas(List chamados)
{

int Cas[] = {7502650, 35651, 35650, 35150, 35151, 35147, 35242, 35244, 35246};
  
  for (Ocorrencia cas : chamados)
  {
      for (int i = 0; i < Cas.length; i++)
      {
          if (cas.getIdProd() == Cas[i])
          {
              CasList.add(cas);
          }//fim do if
      }
  }//fim do for externo
  return CasList;

}//fim do metodo getCas

public List getAlergia(List chamados)
{

int Alergia[] = {659290, 659288};
  for (Ocorrencia alergia : chamados)
  {
      for(int i = 0; i < Alergia.length; i++)
      {
          if (alergia.getIdProd() == Alergia[i])
          {
              AlergiaList.add(alergia);
          }//fim do if
      }//fim do for interno
  }//fim do for externo
  return AlergiaList;

}//fim do metodo

public List getCore(List chamados)
{

int Core[] = {16525, 16524, 16527, 16562, 16421, 16428, 16396, 65074, 65075, 65076, 1213, 1231, 1232, 1211};
  for (Ocorrencia core : chamados)
  {
      for(int i = 0; i < Core.length; i++)
      {
          if (core.getIdProd() == Core[i])
          {
              CoreList.add(core);
          }//fim do if
      }//fim do for interno
  }//fim do for externo
  return CoreList;

}//fim do metodo

public List getModulo(List chamados)
{

int Modulo[] = {6239, 1219, 112159, 6241, 1220, 1221, 668073, 6243};
  for (Ocorrencia modulo : chamados)
  {
      for(int i = 0; i < Modulo.length; i++)
      {
          if (modulo.getIdProd() == Modulo[i])
          {
              ModuloList.add(modulo);
          }//fim do if
      }//fim do for interno
  }//fim do for externo
  return ModuloList;

}//fim do metodo

public List getPediatrico(List <Ocorrencia> chamados)

{

int Pediatrico[] = {18938, 18943, 18929, 16859, 16803, 16846, 16442, 16440, 16820, 16898};
  for (Ocorrencia pediatrico : chamados)
  {
      for(int i = 0; i < Pediatrico.length; i++)
      {
          if (pediatrico.getIdProd() == Pediatrico[i])
          {
              PediatricoList.add(pediatrico);
          }//fim do if
      }//fim do for interno
  }//fim do for externo
  return PediatricoList;

}//fim do metodo

public List getEspecifica(List <Ocorrencia> chamados)

{

int Especifica[] = {16787, 16493, 16972, 16953, 6235, 6251, 6246, 6232, 6253, 6252, 16516, 16433, 6248};
  for (Ocorrencia especifica : chamados)
  {
      for(int i = 0; i < Especifica.length; i++)
      {
          if (especifica.getIdProd() == Especifica[i])
          {
              EspecificaList.add(especifica);
          }//fim do if
      }//fim do for interno
  }//fim do for externo
  return EspecificaList;
}//fim do metodo
 
public List getOral(List <Ocorrencia> chamados)
{
  
  int Oral[] = {18836, 18848, 18842, 18819, 18812, 18103, 18107, 18111, 18415, 18417, 18416, 18438, 18510, 18498, 18474, 18627, 18667, 18628 };
  for (Ocorrencia oral : chamados)
  {
      for(int i = 0; i < Oral.length; i++)
      {
          if (oral.getIdProd() == Oral[i])
          {
              OralList.add(oral);
          }//fim do if
      }//fim do for interno
  }//fim do for externo
  return OralList;

}//fim do metodo

public List getinstitucional(List <Ocorrencia> chamados)
{
  
  int Inst[] = {1212};
  for (Ocorrencia inst : chamados)
  {
      for(int i = 0; i < Inst.length; i++)
      {
          if (inst.getIdProd() == Inst[i])
          {
              InstiList.add(inst);
          }//fim do if
      }//fim do for interno
  }//fim do for externo
  return InstiList;

}//fim do metodo

public List classificaReclamacoes(List<Ocorrencia> classificados)
 {
    
    ArrayList<Ocorrencia> Reclamacoes = new ArrayList<Ocorrencia>();
  for (Ocorrencia data : classificados)
  {
     if(data.getTipochamado().equals("Reclamação"))
      {
          Reclamacoes.add(data);
      }//fim do if
      
  }// fim do for interno
   return Reclamacoes; 
 }//fim do metodo Classifica
 
 
 public ArrayList classificaCritica(List<Ocorrencia> classificados)
 {
    ArrayList<Ocorrencia> Criticas = new ArrayList<Ocorrencia>();
    for (Ocorrencia data : classificados)
    {
        if(data.getTipochamado().equals("Crítica"))
      {
          Criticas.add(data);
      }//fim do if
    }
     return Criticas;
 }//fim das criticas classificadas
 
 
 
 
 public List classificaElogios(List<Ocorrencia> classificados)
 {
     ArrayList<Ocorrencia> Elogios = new ArrayList<Ocorrencia>();
    for (Ocorrencia data : classificados)
    {
       if(data.getTipochamado().equals("Elogio / Agradecimento"))
      {
          Elogios.add(data);
      }//fim do if
    }
     return Elogios;
 }//fim das criticas classificadas
 
 
 
 
 
  public List classificaInformacoes(List<Ocorrencia> classificados)
 {
     ArrayList<Ocorrencia> Informacoes = new ArrayList<Ocorrencia>();
    for (Ocorrencia data : classificados)
    {
        if(data.getTipochamado().equals("Informação"))
      {
          Informacoes.add(data);
       }//fim do if
    }
     return Informacoes;
 }//fim das criticas classificadas
  
  
  
  
   public List classificaSugestoes(List<Ocorrencia> classificados)
 {
     ArrayList<Ocorrencia> Sugestoes = new ArrayList<Ocorrencia>();
    for (Ocorrencia data : classificados)
    {
       if(data.getTipochamado().equals("Sugestão"))
      {
          Sugestoes.add(data);
      }//fim do if
    }
     return Sugestoes;
 }//fim das criticas classificadas
  
  
  
  
   public List classificaSolicitacoes(List<Ocorrencia> classificados)
 {
     ArrayList<Ocorrencia> Solicitacoes = new ArrayList<Ocorrencia>();
    for (Ocorrencia data : classificados)
    {
       if(data.getTipochamado().equals("Solicitação"))
      {
          Solicitacoes.add(data);
      }//fim do if
    }
     return Solicitacoes;
  
 }//fim das criticas classificadas

 //Metodo que executa toda soma de Ocorrencia
  public int sum(List< Ocorrencia > list)
  {
   int total = 0;
   for (Ocorrencia Contatos : list)
   {
       total += Contatos.getQtd();
   }
   return total;

}//fim do metodo

//metodo que conta ocorrencia via carta
  public int contaCarta(List< Ocorrencia > list)
  {
      int countcarta = 0;
      
      for (Ocorrencia Contatos : list)
      {
          if (Contatos.getFormacontato().equals("Carta"))
          {
              countcarta += Contatos.getQtd();
          }
      }//fim do for
      return countcarta;          
  }//fim do metodo
  //metodo que conta ocorrencia via email
  public int contaEmail(List<Ocorrencia> list)
  {
      int countemail = 0;
      for (Ocorrencia Contatos : list)
      {
          if (Contatos.getFormacontato().equals("E-mail"))
          {
              countemail += Contatos.getQtd();
          }
      }//fim do for
     return countemail;          
  }//fim do metodo
  //metodo que conta ocorrencia via fone
  public int contaFone(List<Ocorrencia> list)
  {
      int countfone = 0;
      for (Ocorrencia Contatos : list)
      {
          if (Contatos.getFormacontato().equals("Fone"))
          {
              countfone += Contatos.getQtd();
          }
      }//fim do for
   return countfone;   
  }//fim do metodo

  public  List clear(List lista)
  {
        lista.clear();
        
         return lista;
  }//fim do metodo clear

}

Pagina jsp:

<%<a class="mention" href="/u/page">@page</a> contentType=text/html%>

<%<a class="mention" href="/u/page">@page</a> pageEncoding=UTF-8%>

<%<a class="mention" href="/u/page">@page</a> import = br.com.supportnet.<em>"%>

<%<a class="mention" href="/u/page">@page</a> import = "java.util.</em>”%>
JSP Page <%-- --%>

<%

List dados = TO.getChamados();

List metabolicos = ocorrenciadata.getMetabolico(dados);

List metacritica = ocorrenciadata.classificaCritica(metabolicos);

Ocorrencia data;

%>

<% for (int i = 0; i < metacritica.size(); i++) { Ocorrencia critica = (Ocorrencia) metacritica.get(i); %>

<%
}
%>

<%List metaelogios = ocorrenciadata.classificaElogios(metabolicos);%>

<% for (int i = 0; i < metaelogios.size(); i++) { Ocorrencia elogios = (Ocorrencia) metaelogios.get(i); %> <% } %>

<%List metainformacoes = ocorrenciadata.classificaInformacoes(metabolicos);%>

<% for (int i = 0; i < metainformacoes.size(); i++) { Ocorrencia informacoes = (Ocorrencia) metainformacoes.get(i); %> <% } %>

<%List metasolicitacoes = ocorrenciadata.classificaSolicitacoes(metabolicos);%>

<% for (int i = 0; i < metasolicitacoes.size(); i++) { Ocorrencia solicitacoes = (Ocorrencia) metasolicitacoes.get(i); %> <% } %>

<%List metasugestoes = ocorrenciadata.classificaSugestoes(metabolicos);%>

<% for (int i = 0; i < metasugestoes.size(); i++) { Ocorrencia sugestoes = (Ocorrencia) metasugestoes.get(i); %> <% } %>

<%List metareclama = ocorrenciadata.classificaReclamacoes(metabolicos);%>

<% for (int i = 0; i < metareclama.size(); i++) { Ocorrencia reclamacoes = (Ocorrencia) metareclama.get(i); %> <% } %>
Metabolicos : <%=ocorrenciadata.sum(metabolicos)%>
Criticas : <%=ocorrenciadata.sum(metacritica)%>
Tipo contato Uf Produto Classificação Descrição Quantidade
<%=critica.getTipocontato()%> <%=critica.getUf()%> <%=critica.getProduto()%> <%=critica.getTipochamado()%> <%=critica.getD()%> <%=critica.getQtd()%>
Elogios : <%=ocorrenciadata.sum(metaelogios)%>
Tipo contato Uf Produto Classificação Descrição Quantidade
<%=elogios.getTipocontato()%> <%=elogios.getUf()%> <%=elogios.getProduto()%> <%=elogios.getTipochamado()%> <%=elogios.getD()%> <%=elogios.getQtd()%>
Informações : <%=ocorrenciadata.sum(metainformacoes)%>
Tipo contato Uf Produto Classificação Descrição Quantidade
<%=informacoes.getTipocontato()%> <%=informacoes.getUf()%> <%=informacoes.getProduto()%> <%=informacoes.getTipochamado()%> <%=informacoes.getD()%> <%=informacoes.getQtd()%>
Solicitações : <%=ocorrenciadata.sum(metasolicitacoes)%>
Tipo contato Uf Produto Classificação Descrição Quantidade
<%=solicitacoes.getTipocontato()%> <%=solicitacoes.getUf()%> <%=solicitacoes.getProduto()%> <%=solicitacoes.getTipochamado()%> <%=solicitacoes.getD()%> <%=solicitacoes.getQtd()%>
Sugestões : <%=ocorrenciadata.sum(metasugestoes)%>
Tipo contato Uf Produto Classificação Descrição Quantidade
<%=sugestoes.getTipocontato()%> <%=sugestoes.getUf()%> <%=sugestoes.getProduto()%> <%=sugestoes.getTipochamado()%> <%=sugestoes.getD()%> <%=sugestoes.getQtd()%>
Reclamações : <%=ocorrenciadata.sum(metareclama)%>
Tipo contato Uf Produto Classificação Descrição Quantidade
<%=reclamacoes.getTipocontato()%> <%=reclamacoes.getUf()%> <%=reclamacoes.getProduto()%> <%=reclamacoes.getTipochamado()%> <%=reclamacoes.getD()%> <%=reclamacoes.getQtd()%>
Fone <%=ocorrenciadata.contaFone(metabolicos)%>
E-Mail <%=ocorrenciadata.contaEmail(metabolicos)%>
Carta <%=ocorrenciadata.contaCarta(metabolicos)%>

Gostaria da ajuda de vcs se possivel

5 Respostas

rafaelglauber

http://www.guj.com.br/posts/list/50115.java

depois disso acho que alguém poderá te ajudar.

CintiaDR

Ah, não consegui ler isso não.

Por favor:
http://www.guj.com.br/posts/list/50115.java

luistiagos

ola… dei uma rapida olhada no seu codigo e pelo que eu vi vc importa seu TO diretamente na jsp e então chama la o metodo que consulta a lista no carregamento da pagina… não faça isto não chame o TO direto no jsp… crie um Servlet que faça a chamada de seu TO para popular as listas e então neste servlet coloque sua lista no request e dai sim chame sua jsp… e na jsp vc captura diretamente a sua lista do request ou session…
de uma estudada em servlets… veja como funciona… mas basicamente faça isto… crie um servlet que intermedie a sua chamada ao TO… e o recebimento da lista… e em seu Servlet coloque sua lista no request
e recupere ela no jsp…

jingle

não cheguei a olhar tudo mas acredito que possa ser problema com cache. você pode enviar um numero aleatório como parâmetro para pagina (usando math.random()), para testar e ver se é problema de cache.

U

Meus amigos, fiz um teste com Servlet e aconteceu o mesmo problema as Listas duplicam de tamanho a cada F5, me parece que quando eu aperto F5 ele vai no Banco e incrementa os dados Lista, a cada F5 a lista vai crescendo. quando eu fecho o Browser ele deveria matar a sessão do usuario e automaticamente zerar as List, não é isso que acontece. a Lista só zera quando derrubo o Tomcat.
tentei dar um clear() na lista sempre que o programa finalizar, mas também não obtive sucesso. Acredito que não seria problema de Cache, pq os dados vão se atualizando dinamicamente ao apertar F5.
Teria alguma forma de derrubar a sessão do usuario sempre que aperta F5 ou fechar a pagina ? acho que ele deveria fazer isso automaticamente.

Algum amigo já passou por isso ?

Criado 19 de maio de 2008
Ultima resposta 21 de mai. de 2008
Respostas 5
Participantes 5