Você está na página 1de 4

Ciclo da vida do Servlet

A implementao da interface Servlet (javax.servlet.Servlet) usada para todos os servlets, porque essa interface que encapsula os mtodos do ciclo de vida do servlet. Nesse ciclo, existem os mtodos init(), service() e destroy(), que esto apresentados abaixo.

O mtodo init()
O Container chama esse mtodo depois que a instncia do servlet for criada. Essa ao somente completada com sucesso depois que o servlet no receber nenhuma solicitao. Esse mtodo consegue sobrecarregar cdigos de iniciao que so executados apenas uma vez, antes do tratamento de qualquer solicitao por parte do usurio. Um exemplo so cases que so necessrios para carregar driver de banco de dados, ou efetuar alguma inicializao de valores. Listagem 1: Assinatura do mtodo init public void init(ServletConfig config) throws ServletException

Comentando sobre a parte prtica, o objeto ServletConfig, que foi definido como parmetro na assinatura do mtodo, contm valores de configurao que so geralmente declarados no arquivo de configurao, o web.xml. Com esse objeto, permitido informar aes que ajudam a no fazerem hardcode no servlet. Essas aes podem ser representadas atravs de banco de dados ou pesquisa de um dado.

O mtodo service()
Esse mtodo invocado quando chega a primeira solicitao do cliente, ou seja, depois que o mtodo init permitir ao servlet responder a uma solicitao. O Container inicia uma nova thread ou aloca um thread de pool, onde ativado o mtodo service. Listagem 2: Assinatura do mtodo service public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException

Os parmetros da assinatura desse mtodo so definidos atravs de um objeto ServletRequest e um objeto ServletResponse. O objeto ServletRequest contm a solicitao do cliente e o objeto ServletResponse contm a resposta do servlet. Esses objetos persistem na determinao de como o servlet servir a solicitao do cliente. Na prtica, esse mtodo determina qual mtodo HTTP (GET ou POST) chamar no servlet.

O mtodo destroy()
Esse mtodo tem como objetivo remover o servlet, sendo invocado quando todas as sequncias dentro do mtodo service() forem finalizadas. Geralmente isso ocorre quando o Container fechado ou a memria est livre, ou seja, esse mtodo limpa qualquer recurso que est ainda ativo.

Exemplo do ciclo de vida de uma servlet


Na Listagem 3 e Figura 1 so mostrados os ciclos de vida do servlet. Listagem 3: Cdigo de demonstrao 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("Mtodo init()"); } @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("Mtodo service()"); } @Override public void destroy() { System.out.println("Mtodo 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 so controlados pelo Container. Abaixo citado um exemplo de como funciona esse processo. O usurio faz uma solicitao atravs de um link ou boto do qual o servlet faz parte. Ento, o Container verifica se a solicitao para um servlet, se for, cria-se os objetos response (HttpServletResponse) e request (HttpServletRequest). Aps essa ao, o Container localiza o servlet baseado na solicitao, onde criada ou alocada uma thread para a solicitao, chamando o mtodo service() do servlet, que passa como argumento os dois objetos request e response. O mtodo service() descobre qual mtodo HTTP (GET ou POST) do servlet chamar. O servlet usa o objeto response para escrever a resposta para o cliente, geralmente esse retorno j a pgina HTML que vai ser exibida. Quando invocado o mtodo destroy(), o mtodo service() termina, sendo que a thread morre ou retorna um para um pool de threads gerenciadas pelo Container. As referncias dos objetos de solicitao acabam saindo do escopo. Com isso, executado um processo de limpeza da memria, que so enviadas para o Garbage Collector.

ServletConfig Recuperando informaes de configurao


Em uma aplicao web JSP, pode ser necessrio s vezes guardar valores de configurao, como usurio e senha do banco de dados. Esses dados so armazenados no arquivo web.xml. Nesse arquivo, existe a opo de especificar um conjunto de parmetros inicial, determinado por pares nome/valor, podendo ser recuperado de dentro do servlet. Listagem 4: Configurao 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 parmetros usado o objeto ServletConfig. Esse objeto possui os seguintes mtodos para ajudar nessa recuperao: getInitParameterNames() - No possui argumento e retorna um Enumeration, que contm todos os nomes de parmetro no objeto ServletConfig. getInitParameter() Possui como argumento uma string e retorna uma string. Listagem 5: Resgata dos parmetros 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 parmetro: "+parameter); System.out.println("Valor do parmetro: "+ config.getInitParameter(parameter)); } }

A Listagem 5 mostra que atravs do parmetro que est no mtodo init(), possvel retornar os valores que foram destacados no arquivo web.xml.

Referncias:
http://docs.oracle.com/javase/6/docs/api/java/util/Enumeration.html http://www.tutorialspoint.com/jsp/jsp_life_cycle.htm http://docs.oracle.com/javaee/5/tutorial/doc/bnahe.html

Você também pode gostar