1. Oyente que escucha los cambios en las propiedades en los objetos de dominio
El oyente de eventos para cambiar los atributos en los objetos de dominio es el oyente para escuchar los eventos de información de cambio de atributo en los tres objetos: ServletContext, Httpsession y HttpservletRequest.
Estas tres interfaces de oyentes son ServletContextAttributeListener, HttpsessionAtTributeListener y ServLetRequestatTributEnstener. Las tres interfaces definen tres métodos para manejar los eventos que aumentan, eliminan y reemplazan los atributos en el objeto escuchado. Los nombres de métodos correspondientes del mismo evento en estas tres interfaces son exactamente los mismos, pero los parámetros aceptados son diferentes.
1.1. Método atributadded
Al agregar un atributo al objeto que se está escuchando, el contenedor web responde llamando al método atributadDed del oyente de eventos. Este método recibe un parámetro de tipo de evento. El oyente puede obtener el objeto de dominio que está agregando atributos y los objetos de atributo guardados en el dominio. La definición completa de sintaxis de cada oyente de atributos de dominio es la siguiente:
Public void atributeadded (servletContextatTributeeVent SCAE) public void atributRoPplaced (httpsessionbindingEvent hsbe) public void attributyMoved (servletRequestattributeEvent Srae)
1.2. Método AttribuTerEmed
Al eliminar un atributo en el objeto que se escucha, el contenedor web llama al método AttributererEmed del oyente de eventos para responder a la definición de sintaxis completa en el oyente de atributos en cada dominio:
Public void atributeremoved (servletContextatTributeEtevent SCAE) public void atributereMoved (httpsessionbindingEvent hsbe) public void atributereMoved (servletRequestatTributeEvent Srae)
1.3. Método de AtributeRePlaced
Cuando se reemplaza un cierto atributo en el objeto de dominio del oyente, el contenedor web llama al método de AtributSePlaced del oyente de eventos para responder a la definición completa de sintaxis en cada oyente de atributos de dominio:
Public void atributRoPlaced (servletContextAttributeeVent SCAE) Public void atributRoPlaced (httpsessionbindingEvent hsbe) public void attributeRePlaced (servletRequestatTributeEvent Srae)
1.4. ServletContextAttributeListener Ejemplo del oyente:
Escriba un oyente ServletContextAttributeListener para monitorear los cambios en los valores de atributo de los objetos de dominio de ServletContext. El código es el siguiente:
paquete me.gacl.web.listener; import java.text.messageformat; import javax.servlet.servletContextatTributeeEvent; import javax.servlet.servletContextextattributeEnstener;/*** @ClassNeName: myServletTextAtTributEnstener* @Description: Event Learcher para el cambio de atributos de atributas de ServetTeMeTeTeTame: @Author: Lonely CANGLANG*@Date: 2014-9-11 10:53:04 PM **/ public class myServletContextAttributeEnstener implementa ServletContextAtTributEnstener {@Override public void attributeadDed (ServletContextAtTruteEsevent scab) {str = str = MessageFormat.Format (" {0}, el valor del atributo es: {1} ", scab.getName (), scab.getValue ()); System.out.println (str); } @Override public void atributereMoved (servletContextAttributeeVent scab) {String str = MessageFormat.Format ("Eliminar atributo: {0} en el objeto de dominio de ServletContext, el valor de atributo es: {1}", scab.getName (), scab.getValue ()); System.out.println (str); } @Override public void attributeRePlaced (servletContextAttributeEvent Scab) {String str = MessageFormat.Format ("El valor del atributo: {0} se reemplazó en el objeto ServletContext", scab.getName ()); System.out.println (str); }}Registre al oyente en el archivo web.xml
<Oyerer> <Scuion> myServletContextAtTributEnstener oyente </scuidt> <Oyerer-class> me.gacl.web.listener.myservletcontextattributeEnstener </oyear-class> </oyer>
Escribir servletContextAttributeListEnertest.jsp Página de prueba
<%@ page language = "java" pageEncoding = "utf-8"%> <! DocType html> <html> <fead> <title> ServletContextatTributeListener Test </title> </head> <body> <%// Agregar aplicación.setTribute ("Nombre", "Longyanglang"); // reemplazar el valor del atributo de nombre en la aplicación del objeto de dominio de la aplicación.setAttribute ("name", "gaCl"); // Eliminar el atributo de nombre en la aplicación del objeto de dominio de la aplicación.removeattribute ("nombre"); %> </body> </html>Los resultados de la operación son los siguientes:
De los resultados en ejecución, podemos ver que el oyente ServletContextListener escuchó con éxito el cambio del valor de la propiedad en el objeto de dominio ServletContext (aplicación).
1.5. ServLetRequestAtTributElistener y HttpsessionAtTributeListener Ejemplo del oyente:
Escriba un oyente para monitorear los cambios en los valores de atributos de los objetos de dominio Httpsession y HttpservletRequest, el código es el siguiente:
paquete me.gacl.web.listener; import java.text.messageFormat; import javax.servlet.servletReSquestatTributeeVent; import javax.servlet.servletRequestatTributEnstener; import javax.servlet.http.httpsessionatTruTelistener; import; importar; import javax.servlet.http.httpSessionBindEnGeVent; public class myRequestandSessionAtTributEnstener implementa httpsessionatTribeSeSistener, servletRequestatTributEnstibuDeSistener {@Override public void attributeadDed (ServletReScribuTiTruTeVevent srae) atributo: {0}, el valor del atributo es: {1} ", srae.getName (), srae.getValue ()); System.out.println (str); } @Override public void atributereMoved (servletRequestatTributeEvent srae) {String str = MessageFormat.Format ("Eliminar atributos en el objeto de dominio ServLetRequest: {0}, el valor de atributo es: {1}", srae.getName (), srae.getValue ()); System.out.println (str); } @Override public void attributeRePlaced (ServLetRequestAtTributeEvent Srae) {String str = MessageFormat.Format ("El valor de los atributos: {0} fue reemplazado en el objeto de dominio ServLetRequest", srae.getName ()); System.out.println (str); } @Override public void atributeadDed (httpsessionBindEngeVent se) {String str = MessageFormat.Format ("El atributo: {0} se agregó al objeto" Httpsession Domain, System.Println (STR); attributereMoved (httpsessionBindingEvent se) {String str = MessageFormat.Format ("El atributo: {0} se eliminó del objeto" Httpsession Domain, el valor del atributo es: {1} ", SE.getName (), SE.GetValue ()); System.out.println (str); } @Override public void attributeRePlaced (httpsessionBindingEvent se) {String str = MessageFormat.Format ("El valor del atributo: {0} se reemplazó en el objeto de dominio de Httpsession", SE.GetName ()); System.out.println (str); }}Registre al oyente en el archivo web.xml
<Oyeer> <Scuion> myRequestandSessionAtTributeListener oyente </scuidt> <Oyerer-class> me.gacl.web.listener.myrequestandsessionAttributeListener </oyear-class> </ oyente>
Escriba requestandsessionAtTributEnsteNertest.jsp Página de prueba
<%@ page lenguaje = "java" pageEncoding = "utf-8"%> <! DocType html> <html> <fead> <title> requestandsessionAttributeListener test </title> </head> <body> <%// Agregar session.setTribute ("aa", "bb"); // Reemplazar el valor del atributo AA en el objeto de dominio de sesión Session.SetAttribute ("aa", "xx"); // elimina el atributo AA Session.RemoveAttribute ("AA"); // Agregar atributo request.setAttribute ("aa", "bb"); // Reemplazar el valor del atributo AA en el objeto de dominio de solicitud Solicitud.SetAttribute ("AA", "xx"); // elimina la solicitud de atributo AA.removeAttribute ("aa"); %> </body> </html>Los resultados de la operación son los siguientes:
A partir de los resultados de ejecución, podemos ver que el oyente httpsessionTtributeListener y servletRequestatTributEnstener escuchó con éxito los cambios en los valores de atributo del objeto de dominio httpsession y el objeto de dominio httpservletRequest.
2. Consciente del oyente de eventos vinculado a la sesión
Los objetos almacenados en el dominio de la sesión pueden tener múltiples estados: Binding (Session.SetAttribute ("Bean", Object)) en la sesión; sin pensar (session.removeattribute ("bean")) del dominio de la sesión; persistir a un dispositivo de almacenamiento con el objeto de sesión; recuperarse de un dispositivo de almacenamiento con el objeto de sesión. Dos interfaces de oyentes especiales "httpsessionbindinglistener y httpsessionActivationListener" se definen en la especificación de servlet para ayudar a los objetos de Javabean a comprender sus estados en el dominio de la sesión: las clases que implementan estas dos interfaces no requieren registro en el archivo web.xml.
2.1. Interfaz httpsessionbindinglistener
Objeto Javabean que implementa la interfaz HttpsessionBindingListener puede sentir que está vinculado a la sesión y los eventos eliminados en la sesión. Cuando el objeto está vinculado al objeto Httpsession, el servidor web llama al método Void ValueBound (httpsessionbindingEvent) del objeto. Cuando el objeto se desbloquea desde el objeto Httpsession, el servidor web llama al método Void ValueUnBound (httpsessionBindingEvent Event) del objeto.
ejemplo:
package me.gacl.domain;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionBindingListener;/*** @ClassName: JavaBeanDemo1* @Description: * The JavaBean object that implements the HttpSessionBindingListener interface can sense that it is bound to the Session and Eventos eliminados de la sesión Cuando el objeto está vinculado al objeto httpsession, el servidor web llama al método Void ValueBound (httpsessionBindingEvent) del objeto cuando el objeto está vinculado al objeto httpsession. Al desapercibir el objeto, el servidor web llama al método Void ValueUnBound (httpsessionBindEvent) del objeto* @Author: Lonely CANGLANG* @date: 2014-9-11 11:14:54 PM **/ public class javabeandemo1 implementa httpsessionbindinglistener {nombre de cadena privada; @Override public Void ValueBound (httpsessionbindingEvent Event) {System.out.println (nombre+"se agregó a la sesión"); } @Override public void ValueUnBound (httpsessionBindingEvent Event) {System.out.println (nombre+"patear por sesión"); } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public javabeandemo1 (nombre de cadena) {this.name = name; }}El Javabeandemo1 anterior Javabean implementa la interfaz HttpsessionBindingListener, por lo que este objeto Javabean puede sentir que está vinculado a la sesión y se elimina de la sesión. El código de prueba es el siguiente:
<%@ page lenguaje = "java" pageCoding = "utf-8"%> <%@ page import = "me.gacl.domain.javabeandemo1"%> <! Doctype html> <html> <foad> <bitle> </head> <sbody <%// bing the javabean object a la sess. Javabeandemo1 ("Lonely Canglang")); // removeattribute ("frijol"); %> </body> </html>Los resultados de la operación son los siguientes:
2.2. HttpsessionActivationListener interfaz
El objeto Javabean que implementa la interfaz httpsessionActivationListener puede sentirse activado (deserializado) y pasivados (serializados) eventos. Antes de que el objeto Javabean vinculado al objeto httpsession se pasive (serializado) con el objeto httpsession, el servidor web llama al método void sessionwillpassivate (httpsessionevent) del objeto Javabean. De esta manera, el objeto Javabean puede saber que será serializado (pasivo) al disco duro con el objeto httpsession.
Después de que el objeto Javabean unido al objeto httpsession se active (deserializado) con el objeto Httpsession, el servidor web llama al método Void SessionDidactive (httpSessionEvent) del objeto Javabean. De esta manera, el objeto Javabean puede saber que se deserializará (activado) y volverá a la memoria con el objeto Httpsession.
ejemplo:
paquete me.gacl.domain; import java.io.Serializable; import javax.servlet.http.httpsessionActivationListener; import javax.servlet.http.httpsessionEvent;/*** @classnEn Percibir la activación del evento de que está activado y pasivo: el objeto Javabean y la sesión están deserializados (activados) en la memoria juntos. Pasación: el objeto Javabean existe en la sesión. Cuando el servidor serializa la sesión en el disco duro, si el objeto Javabean en la sesión implementa la interfaz serializable, el servidor serializará el objeto Javabean en la sesión en el disco duro juntos. La operación del objeto Javabean y la sesión del disco duro juntos se llama pasivación. Si el objeto Javabean en la sesión no implementa la interfaz Serializable, el servidor primero eliminará el objeto Javabean en la sesión que no implementa la interfaz serializable y luego serializará (pasearse) la sesión en el disco duro. Cuando el objeto Javabean vinculado al objeto httpsession se pasivará con el objeto httpsession, el servidor web llama al vacío del objeto Javabean antes de que el objeto Javabean vinculado al objeto httpsession se pasee con el objeto httpsession. SessionWillPassivate (httpsessionEvent Event) Método para que el objeto Javabean pueda saber que se serializará (pasivo) con el objeto Httpsession al disco duro. Después de que el objeto Javabean unido al objeto httpsession se activará con el objeto httpsession, el servidor web llama al método nso 11:22:35 pm **/ clase pública JavabeAndemo2 implementa httpsessionActivationListener, serializable {private estático final long serialversionUid = 7589841135210272124l; nombre de cadena privada; @Override public void sessionwillpassivate (httpsessionEvent se) {System.out.println (nombre+"y la sesión se serializan (pasivos) en el disco duro juntos. La identificación de la sesión es:"+SE.GetSession (). GetId ()); } @Override public void sessionDidActivate (httpsessionEvent se) {system.out.println (nombre+"y la sesión están deserializados (activados) del disco duro juntos. La identificación de la sesión es:"+SE.GetSession (). GetId ()); } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public javabeandemo2 (nombre de cadena) {this.name = name; }}Para observar el proceso del objeto Javabean unido al objeto Httpsession que se está pasivando al disco duro y reactivado del disco duro a la memoria, debemos usar el servidor Tomcat para ayudarnos a completar el proceso de pasivación y activación del objeto HttpSession. Los métodos específicos son los siguientes:
Cree un archivo context.xml en la carpeta Webroot/Meta-Inf de la siguiente manera:
El contenido del archivo context.xml es el siguiente:
<Entext> <Manager classname = "org.apache.catalina.session.persistentManager" maxidleswap = "1"> <store classname = "org.apache.catalina.session.filestore" directorio = "gacl"/> </serter> </xtute>
Después de 1 minuto de configuración en el archivo context.xml, pasee el objeto httpsession en una carpeta GACL en el disco duro local
El código de prueba JSP es el siguiente:
<%@ page lenguaje = "java" pageEncoding = "utf-8"%> <%@ page import = "me.gacl.domain.javabeandemo2"%> <! Doctype html> <html> <Head> <title> </title> <bod> <body> tan pronto como usted acceda a la página JSP, httpssession se crea. La identificación de la sesión creada es: $ {pageContext.session.id} <hr/> <% session.setAttribute ("bean", new javabeandemo2 ("solitario y orgulloso")); %> </body> </html>Al acceder a esta página JSP, el servidor creará inmediatamente un objeto Httpsession y luego vinculará el objeto Javabean que implementa la interfaz httpsessionActivationListener al objeto de sesión. Después de esperar 1 minuto, nadie accederá nuevamente a esta página JSP, y el servidor se pasivará automáticamente (serializará) el objeto Httpsession al disco duro.
Podemos encontrar la sesión serializada en el almacenamiento local en la carpeta Work/Catalina/Catalina/Localhost/Javaweb_Listener_20140908/GACL, como se muestra en la figura a continuación:
Al acceder nuevamente a esta página JSP, el servidor reactivará automáticamente (Deserialize) el objeto Httpsession en el disco duro y lo devolverá a la memoria. Los resultados de la operación son los siguientes:
Solo hay mucho contenido en la tecnología de oyentes en la tecnología de desarrollo de Javaweb. En el trabajo diario, la tecnología del oyente se usa con mayor frecuencia en el desarrollo del proyecto Javaweb, por lo que debe dominar esta tecnología.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.