АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

My session counter: 1

Читайте также:
  1. Configuration, Session и SessionFactory
  2. Session.createQuery(“from Company”)
  3. Тема 4. Сеансовый уровень (Session layer)

Обработка событий

Существует несколько интерфейсов, которые позволяют следить за событиями, связанными с сеансом, контекстом и запросом сервлета, генерируемыми во время жизненного цикла Web-приложения:

  • javax.servlet.ServletContextListener – обрабатывает события создания/удаления контекста сервлета;
  • javax.servlet.http.HttpSessionListener – обрабатывает события создания/удаления HTTP-сессии;
  • javax.servlet.ServletContextAttributeListener – обрабатывает события создания/удаления/модификации атрибутов контекста сервлета;
  • javax.servlet.http.HttpSessionAttributeListener – обрабатывает события создания/удаления/модификации атрибутов HTTP-сессии;
  • javax.servlet.http.HttpSessionBindingListener – обраба­тывает события привязывания/разъединения объекта с атрибутом HTTP-сессии;
  • javax.servlet.http.HttpSessionActivationListener – обрабаты­вает события связанные с активацией/дезактивацией HTTP-сессии;
  • javax.servlet.ServletRequestListener – обрабатывает события создания/удаления запроса;
  • javax.servlet.ServletRequestAttributeListener – обрабаты­вает события создания/удаления/модификации атрибутов запроса сервлета.
Интерфейсы и их методы
ServletContextListener contextDestroyed(ServletContextEvent e) contextInitialized(ServletContextEvent e)
HttpSessionListener sessionCreated(HttpSessionEvent e) sessionDestroyed(HttpSessionEvent e)
ServletContextAttributeListener attributeAdded(ServletContextAttributeEvent e) attributeRemoved(ServletContextAttributeEvent e) attributeReplaced(ServletContextAttributeEvent e)
HttpSessionAttributeListener attributeAdded(HttpSessionBindingEvent e) attributeRemoved(HttpSessionBindingEvent e) attributeReplaced(HttpSessionBindingEvent e)
HttpSessionBindingListener valueBound(HttpSessionBindingEvent e) valueUnbound(HttpSessionBindingEvent e)
HttpSessionActivationListener sessionWillPassivate(HttpSessionEvent e) sessionDidActivate(HttpSessionEvent e)
ServletRequestListener requestDestroyed(ServletRequestEvent e) requestInitialized(ServletRequestEvent e)
ServletRequestAttributeListener attributeAdded(ServletRequestAttributeEvent e) attributeRemoved(ServletRequestAttributeEvent e) attributeReplaced(ServletRequestAttributeEvent e)

Регистрация блока прослушивания производится в дескрипторном файле приложения.

Демонстрация обработки событий изменения состояния атрибутов сессии будет рассмотрена на примере №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 начиная
с версии 2.4. С его помощью можно отследить события создания запроса при обращении к сервлету и его уничтожении.

/* пример # 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 контейнера сервлетов, будет выведено:


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.)