-
O ciclo de vida de um servlet é controlado pelo container no qual o servlet tenha sido implantado.
Quando uma requisição é mapeada para um servlet, o containet executa as seguintes etapas:
- Se uma instância do servlet não existe, o container web:
* Carrega a classe servlet.
* Cria uma instância da classe.
* Inicializa a instância do servlet chamando o método init.
- Chama o método service, passando obetos de requisição e resposta.
Se o container precisa remover o servlet, ele o finaliza chamando o método destroy.
-
O ciclo de vida da servlet, segundo o site Linguagens de Programação, é esse:
Dito isso, analisando cada item.
I. Quando o servidor recebe uma requisição, ela é repassada para o container que, por sua vez, carrega a classe na memória e cria uma instância da classe do servlet. O gabarito diz que é correto. De fato, trata-se do procedimento padrão: se ocorrer a requisição e a servlet não existir, este é o procedimento. Acontece que, se já houver uma classe da servlet instanciada, ele não vai criar a instância. Portanto, eu particularmente discordo do gabarito, mas fazer o quê..?
II. Quando um servlet é carregado pela primeira vez para a máquina virtual Java do servidor, o método init() é invocado, para preparar recursos para a execução do serviço ou para estabelecer conexão com outros serviços. Correto. É dedutível da imagem.
III. Estando o servlet pronto para atender as requisições dos clientes, o container cria um objeto de requisição (ServletRequest) e de resposta (ServletResponse) e depois chama o método service(), passando os objetos como parâmetros. Correto, é isso mesmo, dedutível da imagem.
IV. O método destroy() permite liberar os recursos que foram utilizados, sendo invocado quando o servidor estiver concluindo sua atividade. Correto. Da imagem, temos que a "Hora da morte" ocorre quando o recurso não é mais necessário e também quando o servidor estiver concluindo sua atividade.
-
Muito bom o comentário do colega acima, só complementando: Acho que a letra "A" estaria errada se estivesse assim :"sempre carrega a classe na memória e cria uma instância da classe do servlet" .
Valeu..
-
Obtive a mesma interpretação da quetão I. Em uma leitura criteriosa a questão não mostra que o conteiner está sendo instanciado pela primeira vez! Marquei com errada também!
-
"Quando recebe uma requisição" quer dizer que toda vez que recebe uma requisição. É o mesmo que dizer: "quando chove eu me molho", quer dizer que toda a vez que chove eu me molho. Ou seja, NÃO tem como o item I estar correto se respeitarmos a língua portuguesa, uma vez que o servlet é criado somente na primeira requisição. Entraria com recurso certo.
-
"estiver concluindo sua atividade"
Concluindo ou concluído? Faz toda diferença!
-
Também quero deixar uma observação sobre o "estiver concluindo sua atividade" que já foi citado, Concluindo e concluído são diferentes. E sobre a I, não entendo por que questões de variadas bancas sempre tendem a fazer esse tipo de afirmação, pela lingua portuguesa da pra interpretar um "sempre", mas segundo eles não, acontece isso, mas não é sempre! Eu fico com o exemplo da chuva do caro amigo ai acima, e quem puder me corrigir sobre isso também agradeço, mas esse é meu pensamento sobre o quesito I. Ah e marquei a letra D.
-
O método destroy() faz parte das ultimas instruções do servidor, mas não é a ultima coisa que o servidor faz. Analisando bem, "concluindo" é mais coerente do que "concluído". Não teria como o servidor chamar o método destroy() depois de concluir (finalizar) suas atividades, já que esse método faz parte dela.
Essa é minha análise do item IV. Mas fiquem a vontade para opinar. Afinal, a discussão pode ser construtiva.
Bons estudos