| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2011 16:24:53
|
iigorr
Thread.start()
![[Avatar]](/images/avatar/0b257f255542ad11b2d4d535718b2ae6.jpg)
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. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2011 16:41:47
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2011 16:48:15
|
iigorr
Thread.start()
![[Avatar]](/images/avatar/0b257f255542ad11b2d4d535718b2ae6.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2011 17:22:44
|
gomesrod
GUJ Ranger
![[Avatar]](/images/avatar/5de6755473dc988fe6c7db81f26a53ac.jpg)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2011 08:22:06
|
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.
|
|
|
 |
|
|