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.