Ciclo de Vida dos servlets  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
iigorr
Thread.start()
[Avatar]

Membro desde: 04/02/2009 15:12:36
Mensagens: 35
Offline

Galera, to com uma dúvida referente ao ciclo de vida dos Servlets. O container inicia o servlet quando este recebe uma solicitação e roda o método init(), e então o método service(). Porém no livro que eu estou lendo diz que só existe uma instancia de cada servlet e não varias conforme a quatidade de requisições. O que roda nas threads que o container aloca? Imaginei que cada 1 tivesse uma instancia diferente do servlet rodando com o parametro request diferente (ja que cada 1 vem de uma requisição diferente).
E quando é que roda o construtor afinal?

O homem por sobre quem caiu a praga
Da tristeza do Mundo, o homem que é triste
Para todos os séculos existe
E nunca mais o seu pesar se apaga!

From A.A.
[Email] [MSN]
el_loko
JavaEvangelist

Membro desde: 30/10/2007 12:09:43
Mensagens: 357
Offline

iigorr wrote:Galera, to com uma dúvida referente ao ciclo de vida dos Servlets. O container inicia o servlet quando este recebe uma solicitação e roda o método init(), e então o método service(). Porém no livro que eu estou lendo diz que só existe uma instancia de cada servlet e não varias conforme a quatidade de requisições. O que roda nas threads que o container aloca?


Boa tarde,

Quem gerencia as threads é o container em questão.
Assim que o container recebe uma requisição ele cria uma nova thread (bem como os objetos request e response), e os passa como parametros para o servlet.
Em seguida são processados os eventos do servlet init e service.

iigorr wrote: Imaginei que cada 1 tivesse uma instancia diferente do servlet rodando com o parametro request diferente (ja que cada 1 vem de uma requisição diferente).



Os objetos request e response são dinâmicos, ou seja, variam para cada solicitação.
iigorr
Thread.start()
[Avatar]

Membro desde: 04/02/2009 15:12:36
Mensagens: 35
Offline

Sim. Isso eu entendi. Minha dúvida é como o container trata várias solicitações, ou seja, vários requests diferentes ao mesmo tempo se ele só tem 1 instância do servlet? E se ele só tem uma instancia do servlet oq é que roda nas threads?

Assim que o container recebe uma requisição ele cria uma nova thread (bem como os objetos request e response), e os passa como parametros para o servlet.


O servlet recebe como parametro a thread?

O homem por sobre quem caiu a praga
Da tristeza do Mundo, o homem que é triste
Para todos os séculos existe
E nunca mais o seu pesar se apaga!

From A.A.
[Email] [MSN]
gomesrod
GUJ Ranger
[Avatar]

Membro desde: 11/05/2007 19:46:22
Mensagens: 901
Offline

Não tem nenhum problema em ter várias threads utilizando a mesma instância do Servlet.
Basta cada uma delas ter uma referência a essa instância, e chamar o método service para cada requisição - passando como parametro o Request e Response da requisição atual.

Um método pode ser chamado por várias threads ao mesmo tempo desde que ele tome certos cuidados para que não aconteça nenhum efeito indesejado. Essa caracterísitica é chamada de "thread-safe".
No caso dos servlets, é importante que não seja alterado o estado do objeto (ou seja, nada de colocar variáveis de instância nele!). Se você fizer isso ele deixará de ser thread-safe, pois uma requisição vai influenciar na outra e aí o bicho pega.

el_loko
JavaEvangelist

Membro desde: 30/10/2007 12:09:43
Mensagens: 357
Offline

iigorr wrote:Sim. Isso eu entendi. Minha dúvida é como o container trata várias solicitações, ou seja, vários requests diferentes ao mesmo tempo se ele só tem 1 instância do servlet? E se ele só tem uma instancia do servlet oq é que roda nas threads?

Bom dia, isso o gomesrod respondeu:
gomesrod wrote:
Não tem nenhum problema em ter várias threads utilizando a mesma instância do Servlet.
Basta cada uma delas ter uma referência a essa instância, e chamar o método service para cada requisição - passando como parametro o Request e Response da requisição atual.

Um método pode ser chamado por várias threads ao mesmo tempo desde que ele tome certos cuidados para que não aconteça nenhum efeito indesejado. Essa caracterísitica é chamada de "thread-safe".
No caso dos servlets, é importante que não seja alterado o estado do objeto (ou seja, nada de colocar variáveis de instância nele!). Se você fizer isso ele deixará de ser thread-safe, pois uma requisição vai influenciar na outra e aí o bicho pega.


iigorr wrote:
O servlet recebe como parametro a thread?

O que o servlet recebe como parametros são os objetos request e response. Assim que o container recebe uma requisição ele cria uma nova thread, os objetos request e response e passa-os para o servlet requisitado.

 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team