Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Desenvolvimento Web I / Aula
Na aula anterior, você estudou a modelagem de diversas classes, como a classe Livraria, responsável por implementar as funcionalidades da livraria: manutenção do estoque e venda dos livros. Para que essa classe e suas operações fiquem disponíveis para a camada de apresentação Web (Servlets e arquivos JSP), é necessário disponibilizar o sistema de alguma forma. Como já vimos antes, vamos disponibilizar o sistema por meio do contexto dos Servlets. Isso é feito pela classe LivrariaContextListener, mostrada na Listagem 1. Um ContextListener pode ser adicionado através do menu New... -> Listener ou diretamente através do menu New... -> Class adicionando a referência à interface ServletContextListener após a criação da classe.
package livraria.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import livraria.negocio.Livraria;
@WebListener
public final class LivrariaContextListener implements ServletContextListener {
public static final String SISTEMA_LIVRARIA = "sistemaLivraria";
public void contextInitialized(ServletContextEvent event) {
ServletContext context = event.getServletContext();
try {
Livraria livraria = new Livraria();
context.setAttribute(SISTEMA_LIVRARIA, livraria);
} catch (Exception ex) {
System.out.println(
"O sistema de livraria não pode ser publicado no contexto: "
+ ex.getMessage());
}
}
public void contextDestroyed(ServletContextEvent event) {
ServletContext context = event.getServletContext();
Livraria livraria = (Livraria) context.getAttribute(SISTEMA_LIVRARIA);
if (livraria != null) {
livraria.fechar();
}
context.removeAttribute(SISTEMA_LIVRARIA);
}
}
Como você pode notar, temos o método contextInitialized() (linha 13), que será executado no evento de inicialização do contexto dos Servlets. Esse método é executado apenas uma vez no servidor e ele instancia a classe Livraria, criando, por meio da linha 17, o núcleo da nossa Livraria virtual, o qual é publicado através de um atributo de contexto de nome “sistemaLivraria”, conforme instruções mostradas pelas linhas 11 e 18. O uso da constante SISTEMA_LIVRARIA evita que o texto “sistemaLivraria” seja escrito em vários lugares (sujeito a erros).
Utilize a opção New / Listener do Eclipse ao invés de New / Class para criar novos Listeners. Assim, a configuração deles no arquivo web.xml (ou, se for o caso, a anotação de @WebListener na classe criada) será feita automaticamente.
Observação: na versão 3.0 do Servlet, é adicionada a anotação @WebListener que remove a necessidade de criação do mapeamento do listener no web.xml. A anotação já define o weblistener e o mapeamento de acordo com o nome do arquivo java criado.
Versão 5.3 - Todos os Direitos reservados