Notizen
O modelo de servlet container - Exemplos
Inhalt der Notizen (5)
Seite 1
Diretório do Projeto
O projeto a seguir exemplifica o conceito de interfaces listener.
Algumas considerações sobre listeners:
Classes listeners devem implementar interfaces listeners, sendo inicializadas pelo container web e seus métodos serão chamados quando o respectivo evento associado ao método dessa classe ocorrer.
As interfaces listeners possuem métodos a serem implementados pela classe que implementa a interface nos escopos de sessão (HttpSession), aplicação (ServletContext) e requisição (ServletRequest).
Ainda, a classe listener deve ser informado no arquivo web.xml, a não ser que a classe listener seja HttpSessionBindingListener. Nesse caso a classe não será informada no descritor.
Os métodos de evento de HttpSessionAttributeListener, ServletRequestAttributeLIstener e ServletContextAttributeListener notificam sobre mudanças na lista de atributos dos escopos de sessão, requisição e aplicação, respectivamente e terão os mesmos nomes de métodos a serem implementados: attributeAdded(), attributeRemoved() e attributeReplaced(), mas não os mesmos parâmetros, o que dependerá da classe listener ser de sessão ( HttpSessionBindingEvent ), aplicação (ServletContextAttributeEvent) ou requisição ( ServletRequestAttributeEvent).
Os métodos das classes listener ServletRequestListener, HttpSessionListener e ServletContextListener serão chamados para eventos de requisição, sessão ou aplicação, respectivamente, quando a requisição, sessão ou aplicação for inicializada ou destruída. Para isso, cotamos com os métodos XXXDestroyed() ou XXXInitialized(), sendo o XXX substutuído por Request, Session ou Context dependendo de qual interface listener está sendo implementada. Os eventos passados a esses métodos são ServletRequestEvent ( para eventos de requisição ), ServletContextEvent ( para eventos de aplicação ) ou HttpSessionEvent ( para eventos de sessão ).
A interface listener HttpSessionBindingListener será utilizada para receber notificação quando objetos são associados ou desassociados de uma sessão, não sendo configurado no descritor de implantação. A classe listener que implementar essa interface deve implementar os métodos: public void valueBound( HttpSessionBindingEvent e), para notificar que o objeto encapsulado pela classe implementadora está sendo associado a uma sessão e public void valueUnbound( HttpSessionBindingEvent e) para notificar desassociação do objeto.
Obs: a diferença entre a interface HttpSessionAttributeListener e HttpSessionBindingListener é que o container criará várias instâncias das classes implementadoras de HttpSessionBindingListener, que executa as ações especificadas quando o objeto determinado for adicionado ou removido da sessão, enquanto para classes que implementam HttpSessionAttributeListener, criará somente uma instância da classe especificada sendo utilizada para rastrear a atividade de todas as sessões no nível de aplicação, necessita ser configurada no descritor de implantação ( arquivo web.xml ).
Por fim, a interface HttpSessionActivationListener será usada pelos atributos de sessão para receber notificação quando uma sessão estiver sendo migrada para uma outra JVM em um ambiente distribuído. A classe que implementar essa interface deve fornecer implementação a seus métodos public void sessionWillPassivate(HttpSessionEvent se) - chamado quando a sessão estiver para ser migrada e public void sessionDidActivate( HttpSessionEvent se ) - chamado depois que a sessão for ativada em outra JVM.
Seite 2
Arquivo web.xml
Aqui podemos ver o arquivo web.xml com a definição da tag < listener > declarando o caminho completo de nossa classe listener em < listener-class > e definindo um atributo de aplicação em < context-param > de nome dburl e de valor jdbc:databaseurl
Reparar também no mapeamento do servlet TesteServlet utilizado no nosso exemplo e chamado via url /parametrosgerais.
Seite 3
Arquivo do servlet TesteServlet.java
Aqui o código do servlet TesteServlet que gera uma página HTML com o parâmetro de inicialização obtido de web.xml.
Nesse código atentar para:
ServletContext contexto = getServletContext();
O código acima utiliza GenericServlet.getServletContext() para obtenção do objeto javax.servlet.ServletContext, que é
uma interface através da qual o servlet container se comunica e expõe seu ambiente aos servlets. Outra maneira de obter esse mesmo objeto é através do objeto ServletConfig no código ServletContext context = getServletConfig().getServletContext();
Enumeration parametros = contexto.getInitParameterNames();
No código acima obtemos os nomes dos parâmetros de inicialização da aplicação web através do objeto ServletContext
String valorParametro = contexto.getInitParameter(nomeParametro);
Para cada parâmetro de inicialização, conforme pode ser visto no código abaixo, obteremos o valor associado a cada nome do parâmetro.
Seite 4
Listener MyServletContextListener
No descritor de implantação, informamos através de < listener > e < listener-class > o nome da classe listener MyServletContextListener, e conforme discutido implementamos seus métodos abstratos contextInitialized() e contextDestroyed() para que, assim que a aplicação web inicializar, imprimirmos na linha de comando do tomcat uma mensagem referente a inicialização da aplicação, e assim que a mesma finalizar execução, imprimirmos uma mensagem indicando que a aplicação foi finalizada. Poderíamos conforme o código comentado abaixo, definirmos que assim que a aplicação finalizar, fecharmos a conexão com a base de dados e assim que a aplicação inicializar, abrirmos uma conexão com a base de dados.
Seite 5
Execução de TesteServlet
Aqui e conforme definido no arquivo web.xml, assim que informarmos a url parametrosgerais, associada a TesteServlet, a lista de parâmetros iniciais do ServletContext será impresso na saída da página JSP.
Ainda, podemos ver na segunda imagem que a mensagem de inicialização da aplicação será mostrada no prompt de comando do Tomcat, conforme definido no web.xml:
< listener >
< listener-class >controle.MyServletContextListener< /listener-class >
< /listener >
E definido na classe listener MyServletContextListener, que implementa a interface listener ServletContextListener e seus métodos:
public void contextInitialized ( ServletContextEvent e ) - mensagem da inicialização da aplicação
public void contextDestroyed ( ServletContextEvent e ) - mensagem de finalização da aplicação
Informationen
- Beschreibung
- Concursos Públicos Desenvolvimento de Software (OCEJWCD 6 ONLINE COURSE) Notiz am O modelo de servlet container - Exemplos, erstellt von Luis Felipe Guariento am 04/05/2018.
- Erstellt von
- Luis Felipe Guariento · Mai 2018
- Aktualisiert
- 4 Mai 2018
- Aufrufe
- 2
- Bewertung