04 listeners

19
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 [email protected]

Upload: marcelo-born

Post on 22-Feb-2015

67 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 04 Listeners

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   [email protected]

Page 2: 04 Listeners

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   [email protected]

Page 3: 04 Listeners

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   [email protected]

Page 4: 04 Listeners

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   [email protected]

Page 5: 04 Listeners

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   [email protected]

Page 6: 04 Listeners

UFSC / CTC / INE 5646 ‐ Programação Web   Patricia D M Plentz   [email protected]

<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

Page 7: 04 Listeners

UFSC / CTC / INE 5646 ‐ Programação Web   Patricia D M Plentz   [email protected]

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

Page 8: 04 Listeners

UFSC / CTC / INE 5646 ‐ Programação Web   Patricia D M Plentz   [email protected]

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

Page 9: 04 Listeners

UFSC / CTC / INE 5646 ‐ Programação Web   Patricia D M Plentz   [email protected]

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

Page 10: 04 Listeners

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   [email protected]

Page 11: 04 Listeners

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   [email protected]

Page 12: 04 Listeners

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   [email protected]

Page 13: 04 Listeners

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   [email protected]

Page 14: 04 Listeners

Os Três Escopos: Contexto, Solicitação e Sessão

UFSC / CTC / INE 5646 ‐ Programação Web   Patricia D M Plentz   [email protected]

Page 15: 04 Listeners

UFSC / CTC / INE 5646 ‐ Programação Web   Patricia D M Plentz   [email protected]

Os Três Escopos: Contexto, Solicitação e Sessão

Page 16: 04 Listeners

A API Atributo

Pg 123

UFSC / CTC / INE 5646 ‐ Programação Web   Patricia D M Plentz   [email protected]

Page 17: 04 Listeners

O escopo do contexto não é thread‐safe

Pg 125

UFSC / CTC / INE 5646 ‐ Programação Web   Patricia D M Plentz   [email protected]

Page 18: 04 Listeners

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   [email protected]

Page 19: 04 Listeners

UFSC / CTC / INE 5646 ‐ Programação Web   Patricia D M Plentz   [email protected]

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.