|
||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
My session counter: 1
Обработка событий Существует несколько интерфейсов, которые позволяют следить за событиями, связанными с сеансом, контекстом и запросом сервлета, генерируемыми во время жизненного цикла Web-приложения:
Регистрация блока прослушивания производится в дескрипторном файле приложения. Демонстрация обработки событий изменения состояния атрибутов сессии будет рассмотрена на примере №1 данной главы. Обрабатываться будут события добавления атрибута URL, а также добавления и изменения атрибута счетчика counter. Для этого необходимо создать класс, реализующий интерфейс HttpSessionAttributeListener и реализовать необходимые для выполнения поставленной задачи методы. /* пример # 5: обработка событий добавления и изменения атрибута сессии: MyAttributeListener.java */ package chapt21; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent;
public class MyAttributeListener implements HttpSessionAttributeListener { private String counterAttr = "counter";
public void attributeAdded(HttpSessionBindingEvent ev) { String currentAttributeName = ev.getName(); String urlAttr = "URL";
if (currentAttributeName.equals(counterAttr)) {
Integer currentValueInt = (Integer) ev.getValue(); System. out. println("в Session добавлен счетчик=" + currentValueInt); } else if (currentAttributeName.equals(urlAttr)) {
StringBuffer currentValueStr = (StringBuffer)ev.getValue(); System. out. println("в Session добавлен URL=" + currentValueStr); } else System. out. println("добавлен новый атрибут"); } public void attributeRemoved(HttpSessionBindingEvent ev) { } public void attributeReplaced(HttpSessionBindingEvent ev) { String currentAttributeName = ev.getName(); // в случае изменений, произведенных со счетчиком, // выводит соответствующее сообщение if (currentAttributeName.equals(counterAttr)) { Integer currentValueInt = (Integer) ev.getValue(); System. out. println("В Session заменен cчетчик=" + currentValueInt); } } } Чтобы события обрабатывались, необходимо включить упоминание об обработчике событий в элемент <web-app> дескрипторного файла web.xml. <listener> <listener-class>chapt21.MyAttributeListener </listener-class> </listener> Тогда в результате запуска сервлета SessionServlet и нескольких обращений к нему в консоль будет выведено: в Session добавлен URL= http://localhost:8080/FirstProject/SessionServlet в Session добавлен счетчик=1 в Session заменен cчетчик=1 в Session заменен cчетчик=2 в Session заменен cчетчик=3 Интерфейс ServletRequestListener добавлен в Servlet API начиная /* пример # 6: обработка событий создания и уничтожения запроса к сервлету: MyRequestListener.java */ package chapt21; import javax.servlet.ServletContext; import javax.servlet.ServletRequest; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; import javax.servlet.http.HttpServletRequest;
public class MyRequestListener implements ServletRequestListener { // счетчик числа обращений к сервлету private static int reqCount;
public void requestInitialized(ServletRequestEvent e) { //будет использован для доступа к log-файлу ServletContext context = e.getServletContext(); //будет использован для получения информации о запросе ServletRequest req = e.getServletRequest();
synchronized (context) { String name = ""; name = ((HttpServletRequest) req).getRequestURI(); // сохранение значения счетчика в log-файл context.log("Request for " + name + "; Count=" + ++reqCount); } } public void requestDestroyed(ServletRequestEvent e) { // вызывается при уничтожении запроса System. out. println("Request уничтожен"); }
} В результате запуска сервлета SessionServlet, в log-файл, расположенный в каталоге /logs контейнера сервлетов, будет выведено: Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.) |