Ciclo da vida do Servlet

Veja neste artigo como funciona a implementação da interface Servlet, conhecendo os métodos que possui e como são processados no ciclo de vida de um servlet. Também aprenda em quais momentos são invocados os métodos dessa interface.

A implementação da interface Servlet (javax.servlet.Servlet) é usada para todos os servlets, porque é essa interface que encapsula os métodos do ciclo de vida do servlet. Nesse ciclo, existem os métodos init(), service() e destroy(), que estão apresentados abaixo.

O método init()

O Container chama esse método depois que a instância do servlet for criada. Essa ação somente é completada com sucesso depois que o servlet não receber nenhuma solicitação. Esse método consegue sobrecarregar códigos de iniciação que são executados apenas uma vez, antes do tratamento de qualquer solicitação por parte do usuário. Um exemplo são cases que são necessários para carregar driver de banco de dados, ou efetuar alguma inicialização de valores.

Listagem 1: Assinatura do método init

public void init(ServletConfig config) throws ServletException

Comentando sobre a parte prática, o objeto ServletConfig, que foi definido como parâmetro na assinatura do método, contém valores de configuração que são geralmente declarados no arquivo de configuração, o web.xml. Com esse objeto, é permitido informar ações que ajudam a não fazerem “hardcode” no servlet. Essas ações podem ser representadas através de banco de dados ou pesquisa de um dado.

O método service()

Esse método é invocado quando chega a primeira solicitação do cliente, ou seja, depois que o método init permitir ao servlet responder a uma solicitação. O Container inicia uma nova thread ou aloca um thread de pool, onde é ativado o método service.

Listagem 2: Assinatura do método service

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

Os parâmetros da assinatura desse método são definidos através de um objeto ServletRequest e um objeto ServletResponse. O objeto ServletRequest contém a solicitação do cliente e o objeto ServletResponse contém a resposta do servlet. Esses objetos persistem na determinação de como o servlet servirá a solicitação do cliente. Na prática, esse método determina qual método HTTP (GET ou POST) chamar no servlet.

O método destroy()

Esse método tem como objetivo remover o servlet, sendo invocado quando todas as sequências dentro do método service() forem finalizadas. Geralmente isso ocorre quando o Container é fechado ou a memória está livre, ou seja, esse método limpa qualquer recurso que está ainda ativo.

Exemplo do ciclo de vida de uma servlet

Na Listagem 3 e Figura 1 são mostrados os ciclos de vida do servlet.

Listagem 3: Código de demonstração do ciclo de vida

package br.com.exemplos; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; @WebServlet("/CicloDeVidaJsp") public class CicloDeVidaJsp implements Servlet{ public CicloDeVidaJsp() { super(); } @Override public void init(ServletConfig arg0) throws ServletException { System.out.println("Método init()"); } @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("Método service()"); } @Override public void destroy() { System.out.println("Método destroy()"); } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } }

Figura 1: Diagrama do ciclo de vida do Servlet

A Figura 1 mostra como os servlets são controlados pelo Container. Abaixo é citado um exemplo de como funciona esse processo.

ServletConfig – Recuperando informações de configuração

Em uma aplicação web JSP, pode ser necessário às vezes guardar valores de configuração, como usuário e senha do banco de dados. Esses dados são armazenados no arquivo web.xml. Nesse arquivo, existe a opção de especificar um conjunto de parâmetros inicial, determinado por pares nome/valor, podendo ser recuperado de dentro do servlet.

Listagem 4: Configuração do arquivo web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <servlet> <servlet-name>ConfiguracaoDemo</servlet-name> <servlet-class>br.com.exemplos.ConfiguracaoDemoServlet</servlet-class> <init-param> <param-name>root</param-name> <param-value>teste123</param-value> </init-param> <init-param> <param-name>usuario2</param-name> <param-value>refeea232</param-value> </init-param> </servlet> </web-app>

Para recuperar esses parâmetros é usado o objeto ServletConfig. Esse objeto possui os seguintes métodos para ajudar nessa recuperação:

Listagem 5: Resgata dos parâmetros criados no arquivo web.xml

public void init(ServletConfig config) throws ServletException { Enumeration parameters = config.getInitParameterNames(); while(parameters.hasMoreElements()){ String parameter = (String)parameters.nextElement(); System.out.println("Nome do parâmetro: "+parameter); System.out.println("Valor do parâmetro: "+ config.getInitParameter(parameter)); } }

A Listagem 5 mostra que através do parâmetro que está no método init(), é possível retornar os valores que foram destacados no arquivo web.xml.

Referências:

Espero que tenham gostado e até a próxima.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados