1. Ouvinte que ouve mudanças nas propriedades em objetos de domínio
O ouvinte do evento para alterar os atributos nos objetos de domínio é o ouvinte por ouvir os eventos de informação de alteração do atributo nos três objetos: servletContext, httpssession e httpServletRequest.
Essas três interfaces do ouvinte são o servletContextTtributElistener, httpSessionAttributelistener e servletRequestattributElistener. Todas as três interfaces definem três métodos para lidar com os eventos que aumentam, excluem e substituem atributos no objeto ouvido. Os nomes de métodos correspondentes do mesmo evento nessas três interfaces são exatamente iguais, mas os parâmetros aceitos são diferentes.
1.1. Método atribuído
Ao adicionar um atributo ao objeto que está sendo ouvido, o contêiner da Web responde chamando o método Attributeadded do ouvinte do evento. Este método recebe um parâmetro de tipo de evento. O ouvinte pode obter o objeto de domínio que está adicionando atributos e os objetos de atributo salvos no domínio. A definição completa de sintaxe de cada atributo de domínio ouvinte é a seguinte:
public void atribuiDedded (servletContextTtributerEvent SCAE) public void atribui -lo (httpSessionBindingEvent hsBe) vazio público atribuído (servletRequestattributeevent srae)
1.2. Método atribuído
Ao excluir um atributo no objeto que está sendo ouvido, o contêiner da web chama o método atribuído do ouvinte para responder à definição completa de sintaxe no ouvinte do atributo em cada domínio:
public void atribuiRemoved (servletContextTributeevent scae) public void atribuiReemoved (httpSessionBindingEvent hsBe public void atribuious (servletRequestattributriveEvent srae)
1.3. Método atribuído
Quando um determinado atributo no objeto de domínio do ouvinte é substituído, o contêiner da web chama o método atribuído do ouvinte do evento para responder à definição completa da sintaxe em cada atributo de domínio ouvinte:
public void atributionEReplaced (servletContextTtributerEvent SCAE) Public Void atribui (httpSessionbindingEvent hsbe) void público atribuído (servletRequestAttributerEvent srae)
1.4. ServletContextTtributelistener Exemplo de ouvinte:
Escreva um ouvinte de servletContextTtributelistener para monitorar as alterações nos valores de atributo dos objetos de domínio servletContext. O código é o seguinte:
pacote me.gacl.web.listener; importar java.text.messageFormat; importar javax.servlet.servletLextextTtributerEvent; import javax. @Author: Lonely CanGlang*@Date: 2014-9-11 22:53:04 **/ public classe myServletContextTatRabutElistener implementa servletContextTattributeListener {@Override public void attributedded (servletContextTtriTeTevent scab) {stride stride {0}, o valor do atributo é: {1} ", scab.getName (), scab.getValue ()); System.out.println (str); } @Override public void atributeRemoved (servletContextTtributriBleevent Scab) {String str = messageFormat.Format ("Excluir atributo: {0} no objeto de domínio servletContext, o valor do atributo é: {1}", scab.getName (), scab.getvalue (); System.out.println (str); } @Override public void AttributEReplaced (ServletContextTtributRableevent Scab) {String str = messageFormat.format ("O valor do atributo: {0} foi substituído no objeto de domínio servletContext", scab.getName ()); System.out.println (str); }}Registre o ouvinte no arquivo web.xml
<Ilanter> <cription> myServletContextTtributEListener Listener </cription> <Ilvier-class> me.gacl.web.listener.myServletContextTtrucleStributelistener </sirvier-class> </siefer>
Write ServletContextTtributelistEnertest.jsp Página de teste
<%@ Page Language = "Java" PageEncoding = "Utf-8"%> <! Doctype html> <html> <head> <title> servletContextTtributeListener Teste </title> </head> <body> <%// Adicionar Application.SetTribute ("Name", "LongynyngLank" Longyng "); // Substitua o valor do atributo Nome no aplicativo Domínio Objeto Application.SetAttribute ("Nome", "Gacl"); // Remova o atributo Nome no aplicativo Domínio Objeto Application.Removeattribute ("Nome"); %> </body> </html>Os resultados da operação são os seguintes:
A partir dos resultados em execução, podemos ver que o ouvinte ServletContextListener ouviu com sucesso a alteração do valor da propriedade no objeto de domínio ServletContext (Application).
1.5. ServletRequestattributelistener e httpssessionAttributelistener Exemplo do ouvinte:
Escreva um ouvinte para monitorar as alterações nos valores de atributo dos objetos de domínio HTTPSession e HttpServletRequest, o código é o seguinte:
pacote me.gacl.web.listener; importar java.text.messageFormat; importar javax.servlet.servletlequestattributeevent; importar javax.servlet.servletRequestattributelistener; import javax.servlet.http.httpSesstTRAnister; javax.servlet.http.HttpSessionBindingEvent;public class MyRequestAndSessionAttributeListener implements HttpSessionAttributeListener, ServletRequestAttributeListener { @Override public void attributeAdded(ServletRequestAttributeEvent srae) { String str =MessageFormat.format( "ServletRequest domain object has added attribute: {0}, o valor do atributo é: {1} ", srae.getName (), srae.getValue ()); System.out.println (str); } @Override public void atributeRemoved (servletRequestattributRableevent srae) {string str = messageFormat.format ("Remova os atributos no objeto de domínio servletRequest: {0}, o valor do atributo é: {1}", srae.getName (), sra.get.value (); System.out.println (str); } @Override public void atributeReplaced (servLetRequestattributerEvent srae) {string str = messageFormat.format ("O valor dos atributos: {0} foi substituído no objeto de domínio servletRequest", srae.getname ()); System.out.println (str); } @Override public void atribuiDed (httpSessionBindingEvent se) {string str = messageFormat.format ("o atributo: {0} foi adicionado ao" httpSession Domain Object, o valor do atributo é: {1} ", se.getName (), se.getValue (); System.out.Ot.Pr. atributeRemoved (httpSessionBindingEvent SE) {String str = messageFormat.Format ("O atributo: {0} foi excluído do" objeto de domínio httpSession, o valor do atributo é: {1} ", se.getName (), se.getValue ()); System.out.println (str); } @Override public void atributeReplaced (httpSessionBindingEvent SE) {String str = messageFormat.format ("O valor do atributo: {0} foi substituído no objeto HttpSession Domain", SE.getName ()); System.out.println (str); }}Registre o ouvinte no arquivo web.xml
<Ilanter> <cription> MyReQuestandSessionAttributEListener ouvinte </cription> <lister-class> me.gacl.web.listener.myrequestandsessionAttributelistener </lister-class> </sivener>
Write RequestAndSessionAttributelistEnertest.jsp Página de teste
<%@ Page Language = "Java" PageEncoding = "Utf-8"%> <! Doctype html> <html> <head> <title> requestAndSessionAttributElistener Teste </title> </ad Head> <body> <%// Adicionar attribute.Settribute ("AA", BB "); // Substitua o valor do atributo AA na sessão do Domínio do Domínio session.setAttribute ("AA", "XX"); // Remova o atributo AA session.removeattribute ("aa"); // Adicionar atributo request.setAttribute ("aa", "bb"); // Substitua o valor do atributo AA na solicitação de objeto de domínio request.setAttribute ("aa", "xx"); // Remova o atributo AA Request.Removeattribute ("AA"); %> </body> </html>Os resultados da operação são os seguintes:
A partir dos resultados da execução, podemos ver que o ouvinte httpSessionAttributEListener e servletRequestattributelistener ouviram com sucesso as alterações nos valores de atributo do objeto HTTPSession Domin e o objeto HttPServletRequest Domain.
2. Ciente do ouvinte do evento vinculado à sessão
Os objetos armazenados no domínio da sessão podem ter vários estados: Binding (session.setAttribute ("Bean", Object)) na sessão; desbaste (session.removeattribute ("bean")) do domínio da sessão; persistir para um dispositivo de armazenamento com o objeto de sessão; recuperando de um dispositivo de armazenamento com o objeto de sessão. Duas interfaces especiais do ouvinte "HttpSessionBindingListener e HttpSessionActivationListener" são definidas na especificação do servlet para ajudar os objetos javabeus a entender seus estados no domínio da sessão:, as classes que implementam essas duas interfaces não requerem registro no arquivo web.xml.
2.1. Interface httpSessionBindingListener
Objeto Javabean que implementa a interface HTTPSessionBindingListener pode sentir que está ligado à sessão e excluiu eventos na sessão. Quando o objeto está vinculado ao objeto HTTPSession, o servidor da Web chama o método do objeto Void ValueBound (HTTPSessionBindingEvent) do objeto. Quando o objeto não está ligado a partir do objeto HTTPSession, o servidor da Web chama o método Void ValueUnbound (evento httpSessionBindingEvent) do objeto.
exemplo:
pacote me.gacl.Domain; importar javax.servlet.http.httpSessionBindingEvent; importar javax.servlet.http.httpSessionBindingListener;/*** @className: JavabeandOn1* @Description:* The Javabean Object Whitlestlens the HoundBenTerBeanSTEMBENSTEMNAM Eventos excluídos da sessão em que o objeto está vinculado ao objeto HTTPSession, o servidor da Web chama o método Void ValueBound (evento httpSessionBindingEvent) do objeto quando o objeto está ligado ao objeto httpSession. Ao desbascar no objeto, o servidor da Web chama o método Void ValueUnbound (HttpSessionBindingEvent)* @Author: Lonely CanGlang* @Date: 2014-9-11 11:14:54 PM **/ Public class; @Override public void ValueBound (evento httpSessionBindingEvent) {System.out.println (nome+"foi adicionado à sessão"); } @Override public void valueunbound (evento httpSessionBindingEvent) {System.out.println (nome+"expulso por sessão"); } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public javabeandemo1 (nome da string) {this.name = name; }}A JavabeAndemo1 Javabean acima implementa a interface httpSessionBindingListener, para que esse objeto Javabean possa sentir que está ligado à sessão e excluído da sessão. O código de teste é o seguinte:
<%@ página linguagem = "java" PageEncoding = "utf-8"%> <%@ página import = "me.gacl.domain.javabeandemo1"%> <! doctype html> <html> <head> <title> </title </head> <body> <%/ bind the Javaban Object to Javabean para <ead> <title> </title> </body> <%/ bind the Javaban OBJECT ao JAVABEAN para Javabean para Javabean para Javaban para Javaban para Javabean para Javaban para Javabean para Javaban para Javabean para Javabean para Javaban para Javabean para o Jav Javabeandemo1 ("solitário canglang")); // removeattribute ("bean"); %> </body> </html>Os resultados da operação são os seguintes:
2.2. Interface httpSessionActivationListener
O objeto Javabean que implementa a interface HTTPSessionActivationListener pode se sentir ativada a ser ativada (deseralizada) e passivados (serializados) eventos. Antes que o objeto Javabean vinculado ao objeto HTTPSession seja passivado (serializado) com o objeto HTTPSession, o servidor da Web chama o método do Void Session WillPassivate (evento HTTPSessionEvent) do objeto Javabean. Dessa forma, o objeto Javabean pode saber que será serializado (passivo) para o disco rígido com o objeto HTTPSession.
Depois que o objeto Javabean vinculado ao objeto HTTPSession deve ser ativado (desserializado) com o objeto HTTPSession, o servidor da Web chama o método do Void SessionDentactive (evento HTTPSessionEvent) do objeto Javabean. Dessa forma, o objeto Javabean pode saber que ele será desserializado (ativado) e retornado à memória com o objeto HTTPSession.
exemplo:
package me.gacl.domain;import java.io.Serializable;import javax.servlet.http.HttpSessionActivationListener;import javax.servlet.http.HttpSessionEvent;/*** @ClassName: JavaBeanDemo2* @Description: JavaBean object that implements the HttpSessionActivationListener interface can percebem a ativação do evento de que é ativado e passivo: o objeto Javabean e a sessão são desserializados (ativados) na memória juntos. Passivação: o objeto Javabean existe na sessão. Quando o servidor serializar a sessão para o disco rígido, se o objeto Javabean na sessão implementar a interface serializável, o servidor serializará serializando o objeto Javabean na sessão no disco rígido juntos. A operação do objeto Javabean e a sessão para o disco rígido juntos é chamado de passivação. Se o objeto Javabean na sessão não implementar a interface serializável, o servidor removerá primeiro o objeto Javabean na sessão que não implementa a interface serializável e depois serialize (passivate) a sessão no disco rígido. Quando o objeto Javabean ligado ao objeto HTTPSession será passivado com o objeto HTTPSession, o servidor da Web chama o vazio do objeto Javabean antes que o objeto Javabean ligado ao objeto httpssession seja passivado com o objeto httpssession. O método sessionwillpassivate (evento httpsessionEvent) para que o objeto Javabean possa saber que ele será serializado (passivo) com o objeto httpsession para o disco rígido. After the javabean object bound to the HttpSession object will be activated with the HttpSession object, the web server calls the void sessionDidActive(HttpSessionEvent event) method of the javabean object so that the javabean object can know that it will be deserialized (reactivated) with the HttpSession object back into memory* @author: Guarante* @date: 2014-9-11 23:22:35 **/ classe pública javabeandemo2 implementa HttpSessionActivationListener, serializável {private estático final serialversionuid = 7589841135210272124L; nome de string privado; @Override public void sessionwillpassivate (httpsessionEvent SE) {System.out.println (nome+"e sessão são serializados (passivos) para o disco rígido juntos. O ID da sessão é:"+se.getSession (). GetId ()); } @Override public void sessionDidActivate (httpSessionEvent SE) {System.out.println (nome+"e sessão são desapealizados (ativados) do disco rígido juntos. O ID da sessão é:"+se.getSession (). GetId ()); } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public javabeandemo2 (nome da string) {this.name = name; }}Para observar o processo do objeto Javabean ligado ao objeto HTTPSession que está sendo passivado para o disco rígido e reativado do disco rígido para a memória, precisamos usar o servidor Tomcat para nos ajudar a concluir o processo de passivação e ativação do objeto httpsession. Os métodos específicos são os seguintes:
Crie um arquivo context.xml na pasta Webroot/meta-Inf da seguinte forma:
O conteúdo do arquivo context.xml é o seguinte:
<Context> <gerenciador className = "org.apache.catalina.session.persistentManager" maxidleswap = "1"> <store classname = "org.apache.catalina.session.Filestore" diretório = "gacl"/> </gerenciador
Após 1 minuto de configuração no arquivo context.xml, passive o objeto HTTPSession em uma pasta GACL no disco rígido local
O código de teste JSP é o seguinte:
<%@ Page Language = "Java" PageEncoding = "Utf-8"%> <%@ página import = "me.gacl.domain.javabeandemo2"%> <! Doctype html> <html> <head> <title> </title </Head> <pody>, assim como você acessa a página, O ID da sessão criada é: $ {pageContext.session.id} <hr/> <% session.setAttribute ("bean", New Javabeandemo2 ("solitário e orgulhoso")); %> </body> </html>Ao acessar esta página JSP, o servidor criará imediatamente um objeto HTTPSession e, em seguida, vinculará o objeto Javabean que implementa a interface HTTPSessionActivationListener ao objeto de sessão. Depois de esperar por 1 minuto, ninguém acessará esta página JSP novamente, e o servidor passará automaticamente (serializará) o objeto HTTPSession para o disco rígido.
Podemos encontrar a sessão serializada para o armazenamento local no trabalho do servidor Tomcat/Catalina/localhost/javaweb_listener_20140908/gacl, como mostrado na figura abaixo:
Ao acessar esta página JSP novamente, o servidor reativará automaticamente (Desserialize) o objeto HTTPSession no disco rígido e o retornará à memória. Os resultados da operação são os seguintes:
Existe muito conteúdo na tecnologia do ouvinte na tecnologia de desenvolvimento Javaweb. No trabalho diário, a tecnologia do ouvinte é usada com mais frequência no desenvolvimento de projetos Javaweb, portanto, você deve dominar essa tecnologia.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.