Ciclo de vida de servlet

A execução de um servlet não difere muito de uma aplicação CGI em sua forma de interação com o servidor. As quatro principais etapas nessa interação são:

  1. cliente envia solicitação ao servidor;
  2. servidor invoca (através do seu container) o servlet indicado para a execução do serviço solicitado;
  3. servlet gera o conteúdo em resposta à solicitação do cliente, eventualmente acessando outros serviços acessíveis através da plataforma Java;
  4. servidor repassa o resultado gerado pelo servlet para o cliente como uma resposta HTTP convencional.
ciclo de vida de servlet

Quando um servlet é carregado pela primeira vez para a máquina virtual Java do servidor, o método init() é invocado. Esse método tipicamente prepara recursos para a execução do serviço (por exemplo, abrir arquivos ou ler o valor anterior de um contador de número de acessos) ou estabelece conexão com outros serviços (por exemplo, com um servidor de banco de dados). O método destroy() permite liberar esses recursos (fechar arquivos, escrever o valor final nessa sessão do contador de acessos), sendo invocado quando o servidor estiver concluindo sua atividade.

Uma diferença fundamental entre um servlet e uma aplicação CGI é que a classe que implementa o servlet permanece carregada na máquina virtual Java após concluir sua execução. Um programa CGI, ao contrário, inicia um novo processo a cada invocação -- por este motivo, CGI deve utilizar mecanismos adicionais para manter o estado entre execuções, sendo a forma mais comum a utilização de arquivos em disco. Com um servlet, tais mecanismos são necessários apenas na primeira vez que é carregado e ao fim da execução do servidor, ou eventualmente como um mecanismo de checkpoint.

Servlets também oferecem como vantagem o fato de serem programas Java. Assim, eles permitem a utilização de toda a API Java para a implementação de seus serviços e oferecem adicionalmente portabilidade de plataforma.