Servlets - Ciclo de Vida

O ciclo de vida de um servlet pode ser definido como o processo completo, desde sua criação até a destruição. A seguir estão os caminhos seguidos por um servlet.

  • O servlet é inicializado chamando o init() método.

  • As chamadas de servlet service() método para processar a solicitação de um cliente.

  • O servlet é encerrado chamando o destroy() método.

  • Finalmente, o servlet é coletado como lixo pelo coletor de lixo da JVM.

Agora vamos discutir os métodos do ciclo de vida em detalhes.

O Método init ()

O método init é chamado apenas uma vez. Ele é chamado apenas quando o servlet é criado e não é chamado para nenhuma solicitação do usuário posteriormente. Portanto, ele é usado para inicializações únicas, assim como com o método init dos miniaplicativos.

O servlet normalmente é criado quando um usuário chama pela primeira vez uma URL correspondente ao servlet, mas você também pode especificar que o servlet seja carregado quando o servidor for iniciado pela primeira vez.

Quando um usuário invoca um servlet, uma única instância de cada servlet é criada, com cada solicitação do usuário resultando em um novo encadeamento que é transferido para doGet ou doPost conforme apropriado. O método init () simplesmente cria ou carrega alguns dados que serão usados ​​durante a vida útil do servlet.

A definição do método init se parece com isto -

public void init() throws ServletException {
   // Initialization code...
}

O método service ()

O método service () é o método principal para executar a tarefa real. O contêiner de servlet (ou seja, servidor da web) chama o método service () para lidar com solicitações vindas do cliente (navegadores) e escrever a resposta formatada de volta para o cliente.

Cada vez que o servidor recebe uma solicitação de um servlet, o servidor gera um novo thread e chama o serviço. O método service () verifica o tipo de solicitação HTTP (GET, POST, PUT, DELETE, etc.) e chama os métodos doGet, doPost, doPut, doDelete, etc. conforme apropriado.

Aqui está a assinatura deste método -

public void service(ServletRequest request, ServletResponse response) 
   throws ServletException, IOException {
}

O método service () é chamado pelo contêiner e o método de serviço invoca os métodos doGet, doPost, doPut, doDelete, etc. conforme apropriado. Portanto, você não tem nada a ver com o método service (), mas substitui doGet () ou doPost () dependendo do tipo de solicitação que você recebe do cliente.

O doGet () e doPost () são os métodos usados ​​com mais frequência em cada solicitação de serviço. Aqui está a assinatura desses dois métodos.

Método doGet ()

Uma solicitação GET resulta de uma solicitação normal de um URL ou de um formulário HTML que não tem nenhum MÉTODO especificado e deve ser tratada pelo método doGet ().

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet code
}

Método doPost ()

Uma solicitação POST resulta de um formulário HTML que lista especificamente POST como o MÉTODO e deve ser tratada pelo método doPost ().

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet code
}

O método destroy ()

O método destroy () é chamado apenas uma vez no final do ciclo de vida de um servlet. Este método dá ao seu servlet a chance de fechar conexões de banco de dados, interromper threads de fundo, gravar listas de cookies ou contagens de ocorrências no disco e executar outras atividades de limpeza.

Depois que o método destroy () é chamado, o objeto servlet é marcado para coleta de lixo. A definição do método destroy se parece com isto -

public void destroy() {
   // Finalization code...
}

Diagrama de Arquitetura

A figura a seguir descreve um cenário típico de ciclo de vida de servlet.

  • Primeiro, as solicitações HTTP que chegam ao servidor são delegadas ao contêiner de servlet.

  • O contêiner de servlet carrega o servlet antes de invocar o método service ().

  • Em seguida, o contêiner de servlet lida com várias solicitações gerando vários threads, cada thread executando o método service () de uma única instância do servlet.