Cursos / Informática para Internet / Desenvolvimento Web I / Aula

arrow_back Aula 02 - Introdução aos Servlets

Ciclo de vida dos Servlets

Muito bem, agora que você já sabe criar um Servlet e executá-lo, vamos avançar nos conceitos e recursos dessa tecnologia, que é a base da programação web em Java. Em primeiro lugar, é importante saber que os Servlets seguem um ciclo de vida. Quando uma requisição web realizada por um cliente é mapeada para um Servlet, ou seja, requer a execução de um Servlet, o contêiner web realiza os passos a seguir.

  1. Se o Servlet ainda não tiver sido carregado (ou seja, é a primeira vez que o Servlet é acessado pelo contêiner):
    1. Carrega a classe do Servlet, isto é, lê o bytecode (código compilado) da classe.
    2. Instancia a classe, ou seja, cria um objeto a partir da classe carregada. Para isso, executa-se o construtor vazio do Servlet.
    3. Executa o método init() do Servlet, responsável por qualquer inicialização ou configuração que se faça necessária para o funcionamento do Servlet.
  2. Executa o método service() definido na superclasse HttpServlet (e assim herdado pelos Servlets). Esse método será responsável por identificar o tipo da requisição web e invocar o método de tratamento apropriado (doGet(), doPost() etc.), como descrito em mais detalhes na próxima seção desta aula.

Por fim, quando os Servlets não são mais necessários (ex.: quando o servidor web está sendo desligado ou reiniciado), o contêiner web executa o método destroy() de cada Servlet que foi instanciado.

Vejamos através da Listagem 3 o código de um Servlet utilizado para imprimir a data e a hora na qual ele foi carregado, executado e finalizado.

Listagem 3 - Servlet que demonstra seu ciclo de vida

Para funcionar, o ServletDataHora possui um atributo do tipo SimpleDateFormat, utilizado para formatar datas e horas em um String de acordo com o padrão definido pelo programador, ou seja, segundo o formato "dd/MM/yyyy - hh:mm:ss". Esse objeto é primeiramente utilizado na implementação do método init(), o qual faz uso do método log (herdado de HttpServlet) para imprimir na saída padrão a data e hora na qual o Servlet foi inicializado, como pode ser visto na aba Console do Eclipse após iniciarmos o servidor web e acessarmos o Servlet (veja a Figura 7).

ServletDataHora mostrando a data e hora atual formatadas

O código similar é visto no método destroy(). Observe que esses dois métodos devem executar os métodos sobrescritos super.init() e super.destroy(), visando garantir uma correta inicialização e liberação de recursos definidos no código herdado da superclasse.

Observe também o uso do @override, anotação no código Java que indica ao compilador que os métodos anotados estão sobrescrevendo métodos das superclasses. É uma boa prática usar esse tipo de anotação, pois dessa forma o compilador garante que o nome e tipos dos parâmetros dos métodos definidos estão de acordo com os da superclasse.

Você pode estar pensando agora: “Por que redefinimos o método doGet() e não o método service()?” A resposta para essa pergunta será dada mais adiante, ainda nesta aula.

Versão 5.3 - Todos os Direitos reservados