Servlets

Bom, eu sei que o servlet é carregado somente uma vez e que todas as requisicoes sao feitas a ele, sem criacao de novas instancias.

O problema é que eu nao sei como fazer pra nao compartilhar objetos entre varios usuarios. Se eu instanciar um objeto em um servlet, este sera acessado por varias pessoas que compartilharao os estados dos atributos.

Eu gostaria de saber como evitar esse problema.

obrigado

Como que uma pessoa vai acessar um objeto de seu servlet??? O servlet num vai embaralhar objetos de um ou outro usuário. O servlet é instanciado para cada requisição ou sessão se não me engano e não para todo mundo.

Então a Kathy Sierra errou quando disse que o Servlet é carregado no container web apenas uma vez… pelo que eu sei, é criada uma nova thread a cada solicitacao.

Meu problema é que eu fiz um POJO de paginacao com instancia no servlet e todas as threads compartilham os atributos dessa instancia.

Como vc, eu não sei tudo, se a kathy sierra falou, então tá bom. Como vc manja muito, sabe tudo, e provavelmente deve ser scwcd (pois estudou toda a teoria com muita atenção) acho estranho vc vir perguntar esse tipo de coisa.

Se o servlet não é thread safe (isso eu não sei, vc q ta falando) vc vai precisar arrumar uma solução para isso. Já que eu não sei nada e me enrolo com as definições e como tudo funciona acho melhor não tentar ajudar, pq se não eu levo patada né…

Falow

Eu não falei que sei de tudo. Eu so respondi ao seu comentário equivocado.

Só quis dizer que esse não é o problema pois são criadas threads e não novas instancias. Minha intenção não foi te ofender. Mas perdão caso eu tenha lhe ofendido. Se você está nervoso, vai pescar :wink:

Senhores,

objetos podem ser mantido entre duas ou mais requisições através dos seguintes recursos:

  • sessão (HttpSession)
  • pode-se criar uma threadlocal… normalmente usada em filters…
  • incluir os elementos que permitam a reconstrução da instância do objeto em campos hidden do html para que na próxima requisição se reconstrua eles…
  • pode-se serializar o objeto e colocá-lo em campos hidden,

existem outras possibilidades, mas estas são as mais comuns.

Mas, não crie atributos em subclasses servlets.

Tudo certo?

fw

Dieval, eu acho que não era exatamente isso que ele tava querendo.

Cada vez q é criada uma session, é criada para o usuário que fez a requisição do Servlet nakele instante.

O que ele quer é compartilhar um objeto à nível de aplicação, com session não tem como…

Eu vou dar uma olhada na documentação, pq não me recordo como faz, mas sei que tem como compartilhar objetos a nível de aplicação…

[ ]'s,
Misael.

[EDITADA]

Na verdade eu eh que entendi errado, sessão resolve o problema sim, eu eh que viajei, entendi q ele queria compartilhar objetos em várias sessões… ehhehe

Fica frio zirocool,

até onde eu sei, os escopos dos servlet são:

  1. application - situação que você estava se referindo (que eu saíba estes objetos são armazenados no objeto ServletContext). Exemplo de situações em que usamos este recurso: informar os usuários on-line em uma aplicação (neste caso não depende de sessão e não precisa manter a informação em base de dados);

  2. session - sessão de usuário (objeto de HttpSession);

  3. request - escopo de visibilidade ou duração da requisição (objeto ServletRequest); e

  4. page - limita-se a visibilidade ou existência ao contexto da página que a define (é armazenada em pageContext).

No problema proposto, ele consegue resolver com o uso de sessão.

fw

Pessaol, realmente eu resolvi com o uso de HttpSession.

Agora cada usuario tem os atributos necessários armazenados em sessao, evitando a “mistura”.

Obrigado