Servlet Listeners - ServletContextListener
Autor: Robson de Araujo | Publicado: 2010-05-08T08:18:00-07:00

Olá Javeiros de plantão! Continuando nossa sequência de posts sobre o exame para SCWCD vamos falar hoje sobre Servlet Listeners. O exame requer que o candidato saiba criar e configurar listeners para os escopos do ciclo de vida de uma aplicação, listeners de atributos e também serem capazes de escolher um filtro apropriado para um determinado cenário. Iremos ver como funcionam os listeners cobrados no exame.&nbsp;Neste artigo falaremos especificamente do listener de contexto (criação ou destruição).
Suponhamos que uma aplicação web necessite de alguns recursos para que esta possa funcionar corretamente. É importante que estes recursos esteja disponíveis assim que a aplicação esteja no "ar", mas como saber se aplicação já foi carregada pelo container? E como garantir que os recursos serão liberados após a aplicação ser desativada? Para resolver o problema descrito neste cenário a API de Servlet disponibiliza um listener de contexto. Através dele e possível sabermos o momento em que a aplicação está sendo carregada ou destruída.
O processo de criação de um listener resume-se basicamente em implementar a interface do listener desejado e fazer a configuração do mesmo no descritor da aplicação (web.xml). Para esse primeiro post iremos utilizar a interface javax.servlet.ServletContextListener. Esta interface deve ser utilizada para a criação de listeners de contexto e ela possui dois métodos que devem ser sobrescritos pela classe implementadora. Os dois métodos são:void contextInitialized (ServletContextEvent): Este método é executado no momento em que a aplicação é carregada pelo container, através do parâmetro ServletContextEvent, que é injetado automaticamente pelo container, é possível obter o objeto ServletContext, onde poderemos adicionar, remover ou capturar atributos ou fazer a leitura de parâmetros de inicialização. ATENÇÃO: este método só é chamado UMA ÚNICA vez durante o toda a vida da aplicação.
void&nbsp;contextDestroyed (ServletContextEvent): Este método é executado no momento em que aplicação está sendo destruída (parada) pelo container. Assim como o método de inicialização este método também só é executado uma vez.
Abaixo temos um exemplo simples de como criar um listener de contexto. No nosso exemplo apenas adicionamos um atributo contendo o momento em que aplicação subiu e podemos usar este atributo para saber quanto tempo a aplicação ficou ativa. O exemplo não é dos melhores, mas você aprenderá com ele que é capaz adicionar atributos que serão visíveis por toda a aplicação no momento seguinte à subida da mesma. Quando a aplicação for destruída o sistema irá exibir uma mensagem contendo o tempo total em segundos que a aplicação ficou no ar.
Primeiramente vamos criar a classe que irá implementar a interface&nbsp;ServletContextListener e vamos também implementar seus dois métodos:











Agora precisamos configurar o nosso listener no arquivo descritor da aplicação, que é o arquivo web.xml da aplicação. Vejamos abaixo como configurar o nosso listener.








A configuração de um listener é bastante simples e resume-se em declarar a classe que implementa a interface de listener. A aplicação irá carregar os listeners na ordem em que eles aparecerem no arquivo web.xml.Espero que este post seja útil de alguma forma pra você! Até o próximo post!