Objeto de um servlet para outro [RESOLVIDO]

Galera, preciso de ajuda para entender como que funciona os servlets. Tenho dois servlets, um cadastra e outro lista… No cadastra tenho dois campos: nome e telefone, e com estes dados eu instancio um objeto Contato. Primeira duvida, para passar o objeto para o servlet lista eu uso o request.setAttribute(“contato”,contato), é isto com que faz um objeto ser passado para outro servlet? No servlet lista para pegar este objeto eu uso o request.getAttribute(“contato”)…???

Entenderam?

e pra que voce quer passar um objeto de um servlet a outro quando voce pode usar apenas uma servlet?

Me expressei mau… eu tenho uma classe ServletController e uma interface Logica. Criei duas classes que implementam a Logica que é o cadastro e a lista. Como eu passo um objeto do cadastro para a lista usando o request ou até mesmo uma session? Para o cadastro eu tenho um jsp e para lista outro…

galera, me da uma luz…

Se eu tenho uma classe que instanciou um objeto, como eu envio este objeto para outra classe usando o session?

Cara, oq vc quer dizer enviar um objeto de uma classe para outra?

Para enviar um objeto de uma classe para outra é facil.

Object a = new Object(); RecebeObjeto b = new RecebeObjeto(); b.receber(a) // Supondo que a classe RecebeObjeto tenha o método receber(Object a);;pronto. O.O

Oq tu ta precisando?

Pense direito pq c não ta conseguindo expressar direito! ^^

Entao, estou tentando enviar um objeto para outra classe usando o session.setAttribute(“obj”, objeto). Entao na outra classe, eu faço um request.getAttribute(“obj”) mas ele não esta trazendo, ele envia como null.

Lonnewolf bom dia, como esta sem o código de fonte vou presumir que o texto que você escreveu anteriormente esta como o seu código fonte, então desta forma você precisa utilizar:

  • Na servlet que vai enviar o objeto
Cliente c1 = new Cliente("Maria");
request.setAttribute("cli", c1);
// ^ aqui estava o seu erro pois não é session como você descreveu ali
  • Na servlet que vai receber o objeto
Cliente c2 = request.getAttribute("obj"); 

Se estava com “session” mesmo desta forma acredito que agora vai funcionar.
Espero ter ajudado

Montroni, meu codigo esta assim mesmo, mas esta tudo como session… Uma coisa que acho estranho é que, nos metodos onde é solicitado a string, eu coloquei o mesmo nome, ou seja:

session.setAttribute("cliente", c1)

E no outro pegando:

session.getAttribute("cliente")

Isto esta certo, ok? Entao, mesmo assim ele traz vazio… ai eu consegui resolver, como? Colocando a primeira letra da string em maiusculo… Isto pode ser um problema do java?
Agora esta funcionando, mas estou so com esta duvida, o da letra maiuscula… vlw…

Lonnewolf acredito bem improvável que seja um erro na jvm ou algo do gênero, talvez você esteja inicializando a classe “cliente” vazia dentro desta nova servlet ??? Voce tem algum tipo de inicialização desta classe “cliente” que aqui utilizamos para exemplo do tipo Cliente cliente = new Cliente() ??? Pois deve existir algum trecho do código ai que esta ou zerando ou inicializando este parametro que você esta passando !

Entao, vou postar trechos do codigo:

Cliente c1 = (Cliente) session.getAttribute("cliente");
if(c1 == null){
c1 = new Cliente();
c1.setNome("lonnewolf");
}

session.setAttribute("cliente", c1);

e o outro que recebe:

Cliente c = (Cliente) session.getAttribute("cliente"); // dai faço o que quiser e depois devolvo
session.setAttribute("cliente");

seria isto, mas so esta funcionando se a string estiver em maiusculo, tipo session.setAttribute(“Cliente”, c1)… tendeu?

mas agora ta rolando, entao fiz tudo certinho neh?

Certinho esta sim lonnewolf mas para tirarmos a duvida do Maiusculo como voce disse faz o seguinte ao inves de usar o nome de parametro “cliente” usa ou outro qualquer tipo “xyz” e verifica se funciona, se funcionar quer dizer que em algum momento esta sendo atribuido null a classe cliente algo do genero ?

Servlet que envia

session.setAttribute("xyz", c1)  

Servlet que recebe

Cliente clienteTeste = (Cliente) session.getAttribute("xyz");
System.out.println("Nome do cliente"+clienteTeste.getnome());

Cara, troquei o nome e funcionou certinho… dai testei como cliente em minusculo mesmo e funcionou tbm… vai saber… unica coisa de diferente que fiz foi parar o tomcat e reiniciar… talvez seja algo do jvm mesmo…

Vlw…

PS: abri um novo topico, com problema novo, veja se vc pode me ajudar tbm…

[quote=lonnewolf]Cara, troquei o nome e funcionou certinho… dai testei como cliente em minusculo mesmo e funcionou tbm… vai saber… unica coisa de diferente que fiz foi parar o tomcat e reiniciar… talvez seja algo do jvm mesmo…

Vlw…

PS: abri um novo topico, com problema novo, veja se vc pode me ajudar tbm…[/quote]

Pois é cara, é aí que mora o perigo. Toda alteração em web service é aconselhavel vc reinicia-lo. Existem alguns webservicers que liberam o chamado “hot deploy” com isso, após vc fazer a alteração ele coloca essa alteração “on-line” para vc. Mas não é garantido.

Da próxima vez, larga o dedo no stop e start! :lol: