You are on page 1of 19

ServletContextListener

umainterfacequepermite:
Notificarquandoocontextoinicializado(a

aplicaoestsendodistribuda);
Conseguirosparmetrosdeinicializaodo

contextodaaplicaoatravsdoServletContext;
Usaronomedelookup doparmetrode

inicializaoparafazerumaconexocomobanco dedados;
UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

ServletContextListener

umainterfacequepermite(continuao):
Armazenaraconexocomobancodedadoscomo

umatributo,paraquetodasaspartesdaaplicao possamacessla.
Notificarquandoocontextodaaplicao

destrudo(aaplicaoretiradadoaroucai);
Encerraraconexocomobancodedados.
UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

ServletContextListener
Import javax.servlet.*; Public class MyServletContextListener implements ServletContextListener { public void contextInitialized (ServletContextEvent event){ //cdigoparainicializaraconexocomobancodedados //earmazenlacomoumatributodecontexto } public void contextDestroyed (ServletContextEvent event){ //cdigoparaencerraraconexocomobancodedados } }
UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

ServletContextListener

Executarumexemplode Listener:
Atarefadolistener conseguiroparmetrode

inicializaodocontextoparaamarcadeuma canetaeusarestastringparaconstruirumobjeto Caneta.


Olistener insereoobjetoCanetanoatributo

ServletContext,deformaqueoservletpossa recuperlo.
UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

ServletContextListener

Executarumexemplode Listener (continuao):


Comisso,oservlettemacessoaumobjetoda

aplicaocompartilhado(objetoCaneta),sem precisarlerosparmetrosdocontexto.
Seoobjetocompartilhadoumacanetaouuma

conexocomobancodedados,noimporta.O importanteusarosparmetrosdeinicializaoda aplicaoparacriarumnicoobjetoquetodasas partesdaaplicaoirocompartilhar.


UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

1. O container l o DD para esta aplicao Container <weapp> ... web.xml 3. O container cria um par de strings nome/valor para cada parmetro init do contexto
marca

2. O Container cria um novo ServletContext, que todas as partes da aplicao iro compartilhar. Container

ServletContext 4. O Container d aos parmetros nome/valor as referncias do ServletContext


marca

Container

String BIC String ServContext

String BIC String

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

5. O container cria uma nova instncia da classe MyServletContextListener

Container

Instncia de MyServletContextListener

6. O container chama o mtodo contextInialized() do listener, passando um novo ServletContextEvent. O objeto de evento tem uma referencia para o servletContext, ento o cdigo que trata o evento consegue obter o contexto atravs do evento e consegue obter o parmetro init do contexto.
marca

7. O Listener solicita ao ServletContextEvent uma referncia para o ServletContext


getServletContext()

String

ServletContext Event

BIC

ServletContext

String

Listener

ServletContext Event

Container
contextInialized(ServletContextEvent)

Listener

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

8. O Listener solicita ao ServletContext o parmetro init do contexto marca


getInitParameter(marca)
marca

9. O Listener usa o parmetro init para construir um novo objeto Caneta

String

Listener

ServletContext

BIC

Listener

String

Instncia de caneta.class

10. O Listener configura o objeto Caneta como um atributo no ServletContext


setAttribute(caneta, c)

Listener

ServletContext

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

11. O container cria um novo servlet (cria um novo servletConfig com parmetros init, d ao servletConfig uma referncia para ServletContext e chama o mtodo init do Servlet)
marca

12. O servlet recebe uma solicitao e pede ao ServletContext o atributo caneta


getAttribute(caneta) Servlet ServletContext

String

ServletConfig

BIC

ServletContext

String

Container

init(ServletConfig)

Instncia de Listenertester

13. O servlet chama o getMarca()


getMarca() Servlet Caneta

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

Oque,defato,umatributo?

Umatributoumobjetoconfiguradoemum dosoutrostrsobjetosdaAPIservlet:
ServletContext HttpServletRequest (ouServletRequest) HttpSession

possvelconsiderlocomoumpar nome/valor(ondenome umaString eo valor umObjeto).


UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

Umatributocomoumobjetopresoemum quadrodeavisos:
Algumoafixounoquadroparaqueoutros

possampeglo.
Qualoescopodeumatributo?Isto,quemtem

acessoaoatributoeporquantotempoelese mantmativo?
UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

AtributosxParmetros

Tipos:
Atributos:Application/context,Request eSession; Parmetros:deinicializaodocontexto,da

solicitaoedoservlet.

Mtodoparaconfigurao:
Atributo:setAttribute(nome,objeto); Parmetros:deinicializaodocontextoedo

servletsoconfiguradosnoDD.
UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

AtributosxParmetros

Tipoderetorno:
Atributo:Objeto; Parmetro:String.

Mtodoparaobteno:
Atributo:getAttribute(nome daString) Parmetro:getInitParameter(nome daString)

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

OsTrsEscopos:Contexto,SolicitaoeSesso

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

OsTrsEscopos:Contexto,SolicitaoeSesso

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

AAPIAtributo

Pg 123

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

Oescopodocontextonothreadsafe

Pg 125

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

Oescopodocontextonothreadsafe

Soluo:
Sincronizaroobjetocontexto

IrfuncionarseTODOS osoutroscdigosque manipulamosmesmosatributosdecontextotambm sincronizaremoServletContext.

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

RefernciasBibliogrficas

SrieUseaCabea(Head First) Servletse JSP.BrianBashan,KathySierra eBertBates. Ed.AltaBooks,2005.

UFSC/CTC/INE5646 ProgramaoWebPatriciaDMPlentzplentz@inf.ufsc.br

You might also like