1. Слушатель, который слушает изменения в свойствах в объектах домена
Слушатель событий для изменения атрибутов в объектах домена является слушателем для прослушивания событий изменения атрибутов в трех объектах: ServletContext, Httpsession и httpservlectrequest.
Эти три интерфейса слушателя являются ServletContextAttributeListener, httpsessionAttributeListener и ServletRequestatTtributeListener. Все три интерфейса определяют три метода для обработки событий, которые увеличивают, удаляют и заменяют атрибуты в слушанном объекте. Соответствующие имена методов того же события в этих трех интерфейсах точно одинаковы, но принятые параметры разные.
1.1. Атрибут метод
При добавлении атрибута в слушаемый объект веб -контейнер отвечает, вызывая метод AttributeAded of the Event Suldeer. Этот метод получает параметр типа события. Слушатель может получить объект домена, который добавляет атрибуты, и объекты атрибута, сохраненные в домене. Полное синтаксическое определение каждого слушателя атрибутов домена выглядит следующим образом:
public void attributedded (ServletContextAtTtributeVent Scae) Public void attributeReded (httpsessionbindingevent hsbe) public void attributermoved (ServletRequestattributeVent srae)
1.2. AttributerEmoved Метод
При удалении атрибута в прослушиваемом объекте веб -контейнер вызывает атрибут -метод слушателя событий, чтобы ответить на полное определение синтаксиса в слушателе атрибутов в каждом домене:
public void attributeremoved (ServletContextAttribitevent scae) public void attributeremoved (httpsessionbindingevent hsbe) public void attributeremoved (ServletRequestattributevent srae)
1.3. AttributeRepled Метод
Когда определенный атрибут в объекте домена слушателя заменяется, веб -контейнер вызывает атрибут, заполненный методом слушателя событий, чтобы ответить на полное определение синтаксиса в каждом слушательнице Attribute:
Public void AttributeRepled (ServletContextAtTtributevent Scae) Public void attributeReded (httpsessionBindingevent hsbe) public void attributeReded (ServletRequestattributevent srae)
1.4. ServletContextAttributeListener прослушивающего пример:
Напишите слушатель ServletContextAttribiteListener, чтобы отслеживать изменения значений атрибутов объектов домена ServletContext. Код заключается в следующем:
пакет me.gacl.web.listener; import java.text.messageformat; import javax.servlet.servletContextattribitevent; import javax.servlet.servletContextAttristeListener;/*** @classname: myservletcontextatristener* @description: event rastribute intextertel Canglang*@Date: 2014-9-11 10:53:04 PM **/ Public Class MyServletContextAttribiteListener реализует ServletContextAttribiteListener {@Override public void attributeAddedded (ServletContextattributevent Scab) {String stressformat.format ("ServletContextatttributevitevent attribute) {1} ", scab.getName (), scab.getValue ()); System.out.println (str); } @Override public void attributerEmoved (ServletContextAttribitevent scab) {string str = messageFormat.format ("Удалить атрибут: {0} в объекте домена ServletContext, значение атрибута: {1}", scab.getName (), scab.getValue ()); System.out.println (str); } @Override public void attributeRededsedploaded (ServletContextAtTtributeVent Scab) {string str = messageFormat.format («Значение атрибута: {0} было заменено в объекте домена ServletContext», scab.getName ()); System.out.println (str); }}Зарегистрируйте слушатель в файле web.xml
<Learser> <SOMNAD> MYSERVLECTEXTETTEXTATTRIBUTELISTENER СЛУЖЕНИЕ </description> <Leasuer-class> me.gacl.web.listener.myservletcontextattributeListener </stirler-class> </sluster>
Написать ServletContextattributeListenerTest.jsp страница тестирования
<%@ page language = "java" pageencoding = "utf-8"%> <! Doctype html> <html> <head> <title> ServletContextattributeListener Test </title> </Head> <%> <%// Добавить приложение Attribute.setattribul ("name", "longyAnglang"); // заменить значение атрибута имени в Application Domain Object Application.setAttribute ("name", "gacl"); // Удалить атрибут имени в Application Object Application.RemoVeatTribute ("name"); %> </body> </html>Результаты работы следующие:
Из выполнения результатов мы видим, что слушатель ServletContextListener успешно прослушал изменение значения свойства в объекте домена ServletContext (приложение).
1.5. ServletRequestattributeListener и httpsessionAttributeListener пример слушателя:
Напишите слушателя, чтобы контролировать изменения в значениях атрибутов httpsessession и httpservletrequest -объектов домена, код выглядит следующим образом:
Пакет me.gacl.web.listener; import java.text.messageformat; import javax.servlet.servletrequestattribitevent; import javax.servlet.servletrequestattributeListener; импорт javax.servlet.http.httpsessionattributelerener; javax.servlet.http.httpsessionBindingevent; открытый класс myRequestandSessionTtributeListener реализует httpsessionAttributeListener, servletRequestattributeListener {@Override public void attributeadded (servletRequestattribueVEVEVENTEVENTENTENTENTERENER {@Override public viodedded (vervletRequestTtribetEvent vroade. {0}, значение атрибута: {1} », srae.getName (), srae.getValue ()); System.out.println (str); } @Override public void attributerEmoved (servletRequestattribitevent srae) {string str = messageformat.format ("удалить атрибуты в объекте ServletRequest Domain: {0}, значение атрибута: {1}", srae.getName (), srae.getValue ()); System.out.println (str); } @Override public void attributeRedsedploaded (servletRequestattribitevent srae) {string str = messageFormat.format («Значение атрибутов: {0} было заменено в объекте ServletRequest Domain», srae.getName ()); System.out.println (str); } @Override public void attributeAdedded (httpsessionBindingevent se) {string str = messageformat.format («Атрибут: {0} был добавлен в« объект домена httpsession, значение атрибута: {1} », se.getname (), se.getValue (); System.out.ourt.println (strIde); attributeremoved (httpsessionBindingevent se) {string str = messageformat.format («Атрибут: {0} был удален из« объекта домена httpsession, значение атрибута: {1} », se.getName (), se.getValue ()); System.out.println (str); } @Override public void attributeRedsedploaded (httpsessionBindingevent se) {string str = messageformat.format («значение атрибута: {0} было заменено в объекте httpsession domain», Se.getName ()); System.out.println (str); }}Зарегистрируйте слушатель в файле web.xml
<Learser> <SOMNAD> MYREQUESTANDSESSIONTTTRIBUTELISTERER СЛУШАТЕЛЬ </ОПИСАНИЕ> <Sluster-class> me.gacl.web.listener.myrequestandSessionattributeListener </stirlier-class> </sluster>
Write requestandSessionAttributeListenerTest.jsp страница тестирования
<%@ page language = "java" pageencoding = "utf-8"%> <! Doctype html> <html> <head> <title> requestandSessionAttributeListener Test </title> </head> <%> <%// Добавить атрибут session.setattribute ("aa", "bb"); // заменить значение атрибута AA в сеансе объекта домена сеанса.setattribute ("aa", "xx"); // Удалить сеанс атрибута AA.RemoVeatTribute ("aa"); // добавить attribute request.setattribute ("aa", "bb"); // заменить значение атрибута AA в объекте домена запроса. // Удалить aTtribute Attruit.RemoVeatTribute ("aa"); %> </body> </html>Результаты работы следующие:
Из результатов прогона мы видим, что слушатель HttpsessionAttributeListener и ServletRequestatTributeListener успешно прослушивали изменения в значениях атрибутов объекта домена httpsession и объекта домена httpservlectrequest.
2.
Объекты, хранящиеся в домене сеанса, могут иметь несколько состояний: привязка (session.setattribute ("bean", объект)) в сеанс; Несовершеннолетний (session.removeattribute ("bean")) из домена сеанса; сохраняется с устройством хранения с объектом сеанса; Восстановление от устройства хранения с объектом сеанса. Два специальных интерфейса слушателей «httpsessionBindingListener и httpsessionActivationlistener» определены в спецификации сервлета, чтобы помочь Javabean Objects понять свои состояния в домене сеанса:, классы, которые реализуют эти два интерфейса, не требуют регистрации в файле web.xml.
2.1. Httpsessionbindinglistener interface
Javabean -объект, который реализует интерфейс httpsessionBindingListener, может ощутить, что он связан с сеансом и удаляет события в сеансе. Когда объект связан с объектом httpsession, веб -сервер вызывает метод void значения (httpsessionbindingevent события). Когда объект не связан с объектом httpsession, веб -сервер вызывает метод void valueunbound (httpsessionbindingevent события) объекта.
пример:
Пакет me.gacl.domain; импорт javax.servlet.http.httpsessionBindingevent; импорт javax.servlet.http.httpsessionBindingListener;/*** @classname: javabeandemo1* @description:* javabean obj Удаленные события из сеанса, когда объект связан с объектом httpsession, веб -сервер вызывает метод void значения (httpsessionbindingevent event) метода объекта, когда объект связан с объектом httpsession. При распределении в объекте веб-сервер вызывает метод объекта void valueunbound (httpsessionbindingevent событие)* @author: Lonely Canglang* @Date: 2014-9-11 11:14:54 PM **/ Public Class JavabeanDemo1 Imprements httpsessessionBindinglistener {Private String name; @Override public void valuebound (httpsessionbindingevent событие) {System.out.println (имя+"было добавлено в сеанс"); } @Override public void valueUnbound (httpsessionBindingEvent Event) {System.out.println (имя+"Выбило по сеансу"); } public String getName () {return name; } public void setName (string name) {this.name = name; } public javabeandemo1 (string name) {this.name = name; }}Приведенный выше Javabeandemo1 Javabean реализует интерфейс httpsessionbindinglistener, поэтому этот объект Javabean может ощутить, что он связан с сеансом и удален из сеанса. Тестовый код заключается в следующем:
<%@ page language = "java" pageencoding = "utf-8"%> <%@ page import = "me.gacl.domain.javabeandemo1"%> <! doctype html> <html> <head> <title> </title> </Head> <bode> <%// Свяжите объект Javabean к сессии. Javabeandemo1 ("одинокий кангланг")); // RemeoVeatTribute ("Bean"); %> </body> </html>Результаты работы следующие:
2.2. HttpsessionActivationListener интерфейс
Объект Javabean, который реализует интерфейс httpsessionActivationlister, может оценить себя, чтобы быть активированным (десериализованным) и пассивированными (сериализованными) событиями. Перед тем, как объект Javabean, связанный с объектом httpsession, будет пассивирован (сериализован) с объектом httpsession, веб -сервер вызывает метод void sessionwillpassivate (httpsessionevent event) метода Javabean объекта. Таким образом, объект Javabean может знать, что он будет сериализован (пассивный) на жесткий диск с помощью объекта Httpsession.
После того, как объект Javabean, связанный с объектом httpsession, должен быть активирован (десериализован) с помощью объекта httpsession, веб -сервер вызывает метод void sessionDidactive (httpsessionEvent Event) объекта Javabean. Таким образом, объект Javabean может знать, что он будет десериализован (активирован) и возвращен в память с помощью объекта HTTPSession.
пример:
Пакет me.gacl.domain; import java.io.serializable; import javax.servlet.http.httpsessionActivationlistener; import javax.servlet.http.httpsessionEvent;/*** @classname: javabeandemo2* @description: javabean ytement whis letressionActivativity letencivativity. Активация события, которое оно активировано и пассивно: объект Javabean и сеанс детериализируются (активируются) в память вместе. Пассивация: Javabean -объект существует в сессии. Когда сервер сериализует сеанс на жесткий диск, если объект Javabean в сеансе реализует сериализуемый интерфейс, сервер будет сериализовать объект Javabean в сеансе вместе на жесткий диск. Работа объекта Javabean и сеанс на жесткий диск вместе называются пассивацией. Если объект Javabean в сеансе не реализует сериализуемый интерфейс, сервер сначала удалит объект Javabean в сеансе, который не реализует сериализуемый интерфейс, а затем сериализует (пассивируйте) сеанс на жесткий диск. Когда объект Javabean, связанный с объектом httpsession, будет пассивирован с объектом httpsession, веб -сервер вызывает пустоту объекта Javabean объекта, прежде чем объект Javabean, связанный с объектом httpsession, пассивируется объектом Httpsession. Метод сеанса WillPassivate (httpsessionEvent Event) так, чтобы объект Javabean мог знать, что он будет сериализован (пассивный) с объектом Httpsession на жесткий диск. После того, как Javabean-объект, связанный с объектом HTTPSession, будет активирован с помощью объекта HTTPSession, веб-сервер вызывает метод void sessionDidactive (httpsessionEvent события) метода Javabean, чтобы Javabean-объект мог знать, что он будет достоверен (реактивирован) с объектом HTTPSession в память* @author: @datevated). 11:22:35 PM **/ открытый класс JavabeAndemo2 реализует httpsessionActivationlistener, serializable {Private Static Long Long Serialversionuid = 7589841135210272124L; Приватное название строки; @Override public void sessionWillPassIvate (httpsessionEvent se) {System.out.println (имя+»и сеанс сериализованы (пассивные) на жесткий диск. Идентификатор сеанса:«+se.getSession (). GetId ()); } @Override public void sessionDiDactivate (httpsessionEvent se) {System.out.println (имя+»и сеанс дезиализованы (активируется) из жесткого диска вместе. Идентификатор сеанса:«+se.getSession (). GetId ()); } public String getName () {return name; } public void setName (string name) {this.name = name; } public javabeandemo2 (string name) {this.name = name; }}Чтобы наблюдать за процессом объекта Javabean, связанного с объектом HTTPSession, пассивированным на жесткий диск и реактивируется от жесткого диска в память, нам необходимо использовать сервер Tomcat, чтобы помочь нам завершить процесс пассивации и активации объекта HTTPSession. Конкретные методы следующие:
Создайте файл context.xml в папке WebRoot/Meta-Inf следующим образом:
Содержимое файла Context.xml следующее:
<Stext> <Manager className = "org.apache.catalina.session.persistentmanager" maxidleswap = "1"> <Store classname = "org.apache.catalina.session.filestore" Directory = "gacl"/> </Manager> </context>
После 1 минуты конфигурации в файле Context.xml, пассивируйте объект HTTPSession в папку GACL на локальном жестком диске
Код теста JSP выглядит следующим образом:
<%@ page language = "java" pageencoding = "utf-8"%> <%@ page import = "me.gacl.domain.javabeandemo2"%> <! Doctype html> <html> <head> <title> </title> </Head> <body> Сразу после того, как вы получаете доступ к странице JSP, создается httpsession. Идентификатор созданного сеанса: $ {pagecontext.session.id} <hr/> <% session.setattribute ("bean", new javabeandemo2 ("одинокий и гордо")); %> </body> </html>При доступе к этой странице JSP сервер немедленно создаст объект httpsession, а затем связывает объект Javabean, который реализует интерфейс httpsessionActivationlister с объектом сеанса. После ожидания в течение 1 минуты никто больше не будет обращаться к этой странице JSP, и сервер автоматически пассивирует (сериализует) объект HTTPSession на жесткий диск.
Мы можем найти сеанс сериализован на локальное хранилище в папке Work/Catalina/Localhost/Javaweb_listener_20140908/GACL, как показано на рисунке ниже:
При обращении к этой странице JSP сервер автоматически будет реагировать (десериализуйте) объект httpsession на жестком диске и вернет его в память. Результаты работы следующие:
В технологии слушателей в технологии разработки Javaweb в технологии разработки Javaweb. В ежедневной работе технология слушателей чаще используется в разработке проектов Javaweb, поэтому вы должны освоить эту технологию.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.