Comparar getParameter com getAttribute

8 respostas
bruninhatp

Oi pessoal, bom dia!
Depois de muito procurar, resolvi postar minha dúvida aqui… :oops:

É o seguinte: Estou tentando comparar um valor recebido por getParameter e um por getAttribute. Passo ambos para String e comparo as Strings, porém, mesmo os valores sendo iguais, sempre retorna diferente.
Depois fiz diferente pra testar. Recebo o getParameter, dou um setAttribute e pego ele devolta com getAttribute, aí passo pra String e comparo novamente as duas Strings. Mas sempre da que são diferentes… Por que não dá certo? :?
O trecho do código de teste:

Object objCodCli = null; // grava no session
Object objCodInformado = null; // grava no session para comparação
Object objNumCaptura = null; // grava no session

String sessionCodCli = null; // recupera do session
String sessionNumCaptura = null; // recupera do session
String sessionCodInformado = null; // recupera do session para comparação
// ====================================================================

// Recebe os valores por parâmetros do Servlet

String codCliente          = request.getParameter(codcli);

String tipoDoc              = request.getParameter(tdoc);

String numContrato      = request.getParameter(ncontrato);
// salva no session para comparação

objCodInformado           = codCliente;

request.getSession().setAttribute(codigoClienteInfo, objCodInformado);

//=====================================================================
// Verifica os valores do Session para verificar se é o mesmo código de cliente e o número da captura.
//=====================================================================
int numCapturas = 1;

sessionCodCli    	   = request.getSession().getAttribute(“codigoCliente”).toString().trim();

sessionCodInformado    = request.getSession().getAttribute(“codigoClienteInfo”).toString().trim();

sessionNumCaptura 	   = request.getSession().getAttribute(“numeroCaptura”).toString().trim();

out.println(" (" + sessionCodCli + “) " + " (” + sessionCodInformado + “) " + " (” + sessionNumCaptura + ") ");

if (sessionCodCli == sessionCodInformado) {

out.println(IGUAL!);

} else {

out.println(DIFERENTE!);

}

:roll:

8 Respostas

M

tatiana … voce nao pode comparar objetos utilizando ==

quando vc faz isso

“teste” == “teste” o resultado é false pois será comparado a referencia dos objetos e nao o valor

caso voce queira comparar o valor utilize o metodo equals

“teste”.equals(“teste”) o resultado será true

boa sorte

M

mais um detalhe

se vc fizer

String s = “teste”
String b = s;
s == b o resultado será true pois os dois objetos possuem a mesma referencia

abraços

J

sua comparacao entre duas strings deve ser feita da seguinte maneira

if (sessionCodCli.equals(sessionCodInformado)) 
     out.println("IGUAL");
  else
      out.println("DIFERENTE");
bruninhatp

Claaro!!! Entendi! Perfeito!
é que sou nova em java e ainda “caio” nessas pequenas questões!

Muito obrigada mackalister!
Muito obrigada juniorfreire!

M

Já que vc esta começado, vai ai uma dica:

evite ao maximo o uso da sessão, sempre que possivel utilize o request!

motivo:
a sessão armazenará as informações ate ela ser destruida, se sua aplicação tem uma demanda alta e vc tem sessoes que ainda nao foram destruidas e o usuario nao esta mais utilizando voce pode criar uma limitação em sua aplicação

ex: digamos que sua sessão ocupa 10kb de memoria quando esta carregada
o tempo de time out dela = 30min

o usuario loga faz alguma coisa e fecha o browser, sua aplicação nao destruiu a sessão logo, ela será destruida depois de 30 minutos
temos outros muitos usuarios no sistema, amplie este problema e verá que pode ser que a memoria do servidor esteja toda utilizada com poucos usuarios realmente usando o sistema, mas as sessões estarão ocupando o espaço!
portanto, sempre remova info inutil da sessão e evite ao maximo sua utilização

ps: existem outros problemas na utilização da sessão, mas são problemas para quando se trabalha com sistemas distribuidos e cluster em app server

abraços

bruninhatp

Oi mackalister! Agora vc realmente me preocupou!
Pq este sistema realmente será distribuido em uma intranet e não dá pra prever de quanto em quanto tempo um usuário irá utilizar…
Eu pensei nessa forma pra fazer um controle de capturas…
É o seguinte: É um sistema com biometria facial. O cara compra algo no carnê, por ex. Na hora de registrar a FAC é capturada uma imagem que verifica em um banco de cadastro biométrico, se aquela código está cadastrado. Se estiver, compara as informações biométricas da face captirada e da face do banco. Se a similaridade estiver baixa, o vendedor pode voltar e capturar a imagem de novo… Pq agentes externos como iluminação podem afetar o cáculo da Inf. Biométrica e a similaridade ficar baixa mesmo… Mas pode ser um cara querendo usar o código de outro… enfim… eu tenho que limitar essas capturas consecutivas com o mesmo código, e pra fazer um contador entre a jsp de captura, o servlet que processa e a jsp de retorno, pensei em usar uma variável de session. E também tem a questão que cada vez que o cara clicar no botão “capturar nova imagem” ele cairá em uma tela de login (exigências do cliente). tem alguma forma de destruir o session cada vez que esgotar o número de capturas daquele cliente?

mduques

Na verdade quando se trata de String pode sim ser feita a comparação utilizando ==

entao seu if (“valor1”==“valor1”) retornaria “true”…

String _1 = "1"; String _2 = "1"; System.out.println(_1==_2);

A questao é o seguinte… quando vc pega o valor pelo getAttribute é retornado um OBJECT e nao uma String como no getParameter… reveja seu código direito

M

Entendi,
bom o fluxo é o seguinte:

abri a pagina de captura faço a captura e armazeno em uma variave.
busco a imagem referente a este cliente do banco ou de outro canto e armazeno em uma variavel.

comparo, se estiver ruim ou diferente , volte para a pagina e recomece tudo de novo , não guarde nada na sessão, neste caso não é necessário.
senão, avance para o proximo estagio (pode ser que voce queira colocar algum indicador que este teste foi um sucesso na sessão, mas não precisa colocar a imagem e sim uma flag)

mas de qualquer forma, voce pode invalidar a sessão sim, mas lembrese que vc irá deslogar o usuario pois voce irá apagar TUDO da sessao … na verdade vc ira apagar a sessao.

se nao me engano é session.invalidate();

qualquer coisa para nao floodar o forum pode me mandar um email: [email removido]

abraços.

Criado 1 de outubro de 2008
Ultima resposta 1 de out. de 2008
Respostas 8
Participantes 4