04 listeners
Post on 22-Feb-2015
67 Views
Preview:
TRANSCRIPT
ServletContextListener É uma interface que permite:
Notificar quando o contexto é inicializado (a aplicação está sendo distribuída);
Conseguir os parâmetros de inicialização do contexto da aplicação através do ServletContext;
Usar o nome de lookup do parâmetro de inicialização para fazer uma conexão com o banco de dados;
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
ServletContextListener
É uma interface que permite (continuação):
Armazenar a conexão com o banco de dados como um atributo, para que todas as partes da aplicação possam acessá‐la.
Notificar quando o contexto da aplicação é destruído (a aplicação é retirada do ar ou cai);
Encerrar a conexão com o banco de dados.
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
ServletContextListener
Import javax.servlet.*;Public class MyServletContextListener implements
ServletContextListener {public void contextInitialized (ServletContextEvent event) {
//código para inicializar a conexão com o banco de dados// e armazená‐la como um atributo de contexto
}public void contextDestroyed (ServletContextEvent event) {
// código para encerrar a conexão com o banco de dados}
}
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
ServletContextListener
Executar um exemplo de Listener:
A tarefa do listener é conseguir o parâmetro de inicialização do contexto para a marca de uma caneta e usar esta string para construir um objeto Caneta.
O listener insere o objeto Caneta no atributo ServletContext, de forma que o servlet possa recuperá‐lo.
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
ServletContextListener
Executar um exemplo de Listener (continuação):Com isso, o servlet tem acesso a um objeto da aplicação compartilhado (objeto Caneta), sem precisar ler os parâmetros do contexto.
Se o objeto compartilhado é uma caneta ou uma conexão com o banco de dados, não importa. O importante é usar os parâmetros de inicialização da aplicação para criar um único objeto que todas as partes da aplicação irão compartilhar.
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
<weapp>...
ServContext
Container
1. O container lê o DD para esta aplicação
web.xml
Container
2. O Container cria um novo ServletContext, que todas as partes da aplicação irão compartilhar.
ServletContext
Container
3. O container cria um par de strings nome/valor para cada parâmetro init do contexto
String
“marca”
“BIC”
String
String
“marca”
“BIC”
String
4. O Container dá aos parâmetros nome/valor as referências do ServletContext
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
Instância de MyServletContextListener
Container
5. O container cria uma nova instância da classe MyServletContextListener
Listener
Container
6. O container chama o método contextInialized() do listener, passando um novo ServletContextEvent. O objeto de evento tem uma referencia para o servletContext, então o código que trata o evento consegue obter o contexto através do evento e consegue obter o parâmetro init do contexto.
contextInialized(ServletContextEvent)
Servlet-Context
Servlet-ContextEvent
“marca”
“BIC”
String
String
Servlet-ContextEvent
Listener
getServletContext()
7. O Listener solicita ao ServletContextEvent uma referência para o ServletContext
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
Servlet-Context
“marca”
“BIC”
String
String
Listener
getInitParameter(“marca”)
8. O Listener solicita ao ServletContext o parâmetro initdo contexto “marca”
Instância de caneta.class
Listener
9. O Listener usa o parâmetro initpara construir um novo objeto
Caneta
Servlet-Context
Listener
setAttribute(“caneta”, c)
10. O Listener configura o objeto Caneta como um atributo no ServletContext
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
Instância de Listenertester
Container
11. O container cria um novo servlet (cria um novo servletConfig com parâmetros init, dá ao servletConfig uma referência para ServletContext e chama o método init do Servlet)
init(ServletConfig)
Servlet-Context
Servlet-Config
“marca”
“BIC”
String
String
12. O servlet recebe uma solicitação e pede ao ServletContext o atributo “caneta”
Servlet
getAttribute(“caneta”)
Servlet-Context
13. O servlet chama o getMarca()
Servlet
getMarca()
Caneta
O que é, de fato, um atributo?
Um atributo é um objeto configurado em um dos outros três objetos da API servlet:ServletContextHttpServletRequest (ou ServletRequest)HttpSession
É possível considerá‐lo como um par nome/valor (onde nome é uma String e o valor é um Objeto).
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
Um atributo é como um objeto preso em um quadro de avisos:
Alguém o afixou no quadro para que outros possam pegá‐lo.
Qual é o escopo de um atributo? Isto é, quem tem acesso ao atributo e por quanto tempo ele se mantém ativo?
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
Atributos x Parâmetros
Tipos:Atributos: Application/context, Request e Session;Parâmetros: de inicialização do contexto, da solicitação e do servlet.
Método para configuração:Atributo: setAttribute(nome, objeto);Parâmetros: de inicialização do contexto e do servlet são configurados no DD.
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
Atributos x Parâmetros
Tipo de retorno:Atributo: Objeto;Parâmetro: String.
Método para obtenção:Atributo: getAttribute(nome da String)Parâmetro: getInitParameter(nome da String)
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
Os Três Escopos: Contexto, Solicitação e Sessão
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
Os Três Escopos: Contexto, Solicitação e Sessão
A API Atributo
Pg 123
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
O escopo do contexto não é thread‐safe
Pg 125
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
O escopo do contexto não é thread‐safe Solução:Sincronizar o objeto contexto
Irá funcionar se TODOS os outros códigos que manipulam os mesmos atributos de contexto também sincronizarem o ServletContext.
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
UFSC / CTC / INE 5646 ‐ Programação Web Patricia D M Plentz plentz@inf.ufsc.br
Referências Bibliográficas
Série Use a Cabeça (Head First) – Servlets e JSP. Brian Bashan, Kathy Sierra e Bert Bates. Ed. Alta Books, 2005.
top related