7 Обработка событий и прослушиватели.ppt
- Количество слайдов: 26
Обработка событий и прослушиватели Профессор Хомоненко А. Д. ПГУПС, 02. 11. 2010 1
Литература: 1. Ноутон П. , Шилдт Г. JAVA 2. Наиболее полное руководство. СПб. : БХВ-Петербург, 2002. ─ 1072 с. 2. Холл М. , Браун Л. Программирование Web. Библиотека профессионала. Пер. с англ. М. : Издательский дом «Вильямс» , 2002. ─ 1264 с. 3. http: //www. intuit. ru/department/pl/javapl/11/ 4. http: //www. javaportal. ru/java/articles/inner. html 5. http: //www. ibm. com/developerworks/ru/edu/jscwcd/section 4. html
Вопросы: 1. Общая характеристика событий 2. Модель контейнера сервлета 3. Слушатели событий веб-приложения 4. Выбор конфигурации слушателя 5. Пример слушателя контекста из Net. Beans 6. Пример слушателя сессии из Net. Beans 7. Указание слушателей в Net. Beans
Общая характеристика событий Событие - это объект. Все события можно разделить на две группы: события низкого уровня и события высокого уровня (семантические). К низкому уровню относятся события: l клавиатуры и мыши; l окна Windows; l компонента; l контейнера; l перемещения фокуса ввода. 4
Общая характеристика событий Модель обработки событий построена на основе стандартного шаблона проектирования ООП Observer/Observable. В качестве наблюдаемого объекта выступает компонент AWT. Для него можно задать один или несколько классовслушателей (listener). В AWT они описываются специальными интерфейсами, название которых оканчивается на слово Listener. Когда с наблюдаемым объектом что-то происходит, создается объект "событие" (event), который "посылается" всем слушателям. Так слушатель узнает, например, о действии пользователя и может на него отреагировать. 5
Общая характеристика событий Рассмотрим появление события Action. Event на примере нажатия на кнопку. Предположим, в нашем приложении создается кнопка сохранения файла: l Button save = new Button("Save"); l add(save); l Теперь, когда окно приложения с этой кнопкой появится на экране, пользователь сможет нажать ее. В результате AWT сгенерирует Action. Event. Чтобы получить и обработать его, необходимо зарегистрировать слушателя. Название нужного интерфейса прямо следует из названия события – Action. Listener. l 6
Модель контейнера сервлета Контекст. Объект, который выполняет интерфейс javax. servlet. Servlet. Context, представляет среду, в которой выполняется веб-приложение. Все сервлеты, относящиеся к одному веб-приложению, разделяют один контекст. Существует один экземпляр интерфейса Servlet. Context, связанный с каждым вебприложением, размещенным в контейнере сервлета. Если контейнер разделяется несколькими виртуальными машинами Java, то веб -приложение имеет экземпляр Servlet. Context для каждой виртуальной машины. 7
Модель контейнера сервлета Параметры инициализации контекста сервлета можно задать так, что информация, действующая на уровне приложения, будет доступна для всех сервлетов, принадлежащих этому веб-приложению. Сервлеты могут получить параметры инициализации, вызвав методы интерфейса Servlet. Context: l public String get. Init. Parameter(String name); l public Enumeration get. Init. Parameter. Names(); Метод get. Init. Parameter() возвращает String, включающую значение параметра инициализации, действующего на уровне контекста, или ничего, если параметр не существует. 8
Модель контейнера сервлета Метод get. Init. Parameter. Names() возвращает имена параметров инициализации контекста в виде Enumeration объектов String. Если контекст не имеет параметров инициализации, возвращается пустой список Enumeration. Контекст сервлета инициализируется, когда загружается веб-приложение, и содержится в объекте Servlet. Config, передаемом методу init(). Сервлеты, расширяющие класс Generic. Servlet, могут вызвать метод get. Servlet. Context() для получения ссылки на контекст, потому что Generic. Servlet реализует интерфейс Servlet. Config. 9
Модель контейнера сервлета Объявление параметров. Каждый параметр инициализации контекста сервлета в вебприложении должен быть объявлен: <context-param> <param-name>Company. Name</param-name> <param-value> IBM </param-value> <description> Name of the company </description> </context-param> Можно получить значение параметра из сервлета: String name=get. Servlet. Context(). get. Init. Parameter ("Company. Name"); 10
Слушатели событий веб-приложения Может потребоваться задать реакцию в ответ на события - такие, как запуск и остановка вебприложения. Для получения сообщений в дескрипторе размещения должен быть настроен класс слушателя. Интерфейсы слушателей: 1. В Servlet. Context. Listener определены методы: l public void context. Initialized(Servlet. Context. Event sce) вызывается, когда веб-приложение готово к обработке 11
Слушатели событий веб-приложения public void context. Destroyed(Servlet. Context. Event sce) вызывается, когда приложение готовится к закрытию. Пример использования методов для регистрации событий приложения: public void context. Initialized(Servlet. Context. Event e) { e. get. Servlet. Context(). log("Context initialized"); } public void context. Destroyed(Servlet. Context. Event e) { e. get. Servlet. Context(). log("Context destroyed"); } 2. Интерфейс Servlet. Context. Attribute. Listener можно применять для получения сообщений об изменениях в списке атрибутов контекста сервлета l 12
Слушатели событий веб-приложения Интерфейс Servlet. Context. Attribute. Listener предоставляет методы: void attribute. Added(Servlet. Context. Attribute. Event scab) void attribute. Removed(Servlet. Context. Attribute. Event scab) void attribute. Replaced(Servlet. Context. Attribute. Event scab) Методы вызываются контейнером соответственно: l при добавлении нового атрибута; l при удалении атрибута; l при замещении атрибута. 13
Слушатели событий веб-приложения 3. Http. Session. Attribute. Listener. Можно хранить атрибуты в объекте Http. Session, они будут доступны в течение сессии. Интерфейс предоставляет методы: l void attribute. Added(Http. Session. Binding. Event se) l void attribute. Removed(Http. Session. Binding. Event se) l void attribute. Replaced(Http. Session. Binding. Event se) Они вызываются контейнером соответственно: l при добавлении нового атрибута к сессии; l при удалении атрибута из сессии; l при замене атрибута из сессии. 14
Выбор конфигурации слушателя Элемент <listener> имеет один подэлемент <listener-class>, значение которого задается как полное имя класса слушателя, например: <listener> <listener-class>com. whiz. My. Servlet. Context. Listener </listener-class> </listener> <listener-class>com. whiz. My. Servlet. Context. Attribute. Listener </listener-class> </listener> 15
Пример слушателя контекста из Net. Beans package listeners; import javax. servlet. Servlet. Context. Attribute. Event; import javax. servlet. Servlet. Context. Attribute. Listener; import javax. servlet. Servlet. Context. Event; import javax. servlet. Servlet. Context. Listener; public final class Context. Listener implements Servlet. Context. Attribute. Listener, Servlet. Context. Listener { 16
Пример слушателя контекста из Net. Beans // контекст сервлета, с которым мы связаны private Servlet. Context context = null; // общие методы // регистрация добавления атрибута контекста сервлета public void attribute. Added(Servlet. Context. Attribute. Event event) { log("attribute. Added('" + event. get. Name() + "', '" + event. get. Value() + "')"); } 17
Пример слушателя контекста из Net. Beans // регистрация удаления атрибута контекста сервлета public void attribute. Removed(Servlet. Context. Attribute. Event event) { log("attribute. Removed('" + event. get. Name() + "', '" + event. get. Value() + "')"); } // регистрация замещения атрибута контекста сервлета public void attribute. Replaced(Servlet. Context. Attribute. Event event) { log("attribute. Replaced('" + event. get. Name() + "', '" + event. get. Value() + "')"); } 18
Пример слушателя контекста из Net. Beans // регистрация факта разрушения приложения public void context. Destroyed(Servlet. Context. Event event) { log("context. Destroyed()"); this. context = null; } // регистрация факта инициализации приложения public void context. Initialized(Servlet. Context. Event event) { this. context = event. get. Servlet. Context(); log("context. Initialized()"); } 19
Пример слушателя контекста из Net. Beans // запись в журнал контекста сервлета приложения private void log(String message) { if (context != null) context. log("Context. Listener: " + message); else System. out. println("Context. Listener: " + message); } 20
Пример слушателя контекста из Net. Beans // запись сообщения и исключения в журнал контекста // сервлета приложения private void log(String message, Throwable throwable) { if (context != null) context. log("Context. Listener: " + message, throwable); else { System. out. println("Context. Listener: " + message); throwable. print. Stack. Trace(System. out); } } } 21
Пример слушателя сессии из Net. Beans package listeners; import javax. servlet. Servlet. Context. Event; import javax. servlet. Servlet. Context. Listener; import javax. servlet. http. Http. Session. Attribute. Listener; import javax. servlet. http. Http. Session. Binding. Event; import javax. servlet. http. Http. Session. Listener; 22
Пример слушателя сессии из Net. Beans public final class Session. Listener implements Servlet. Context. Listener, Http. Session. Attribute. Listener, Http. Session. Listener { private Servlet. Context context = null; // общие методы // регистрация добавления атрибута public void attribute. Added(Http. Session. Binding. Event event) { log("attribute. Added('" + event. get. Session(). get. Id() + "', '" + event. get. Name() + "', '" + event. get. Value() + "')"); } 23
Пример слушателя сессии из Net. Beans // регистрация создания сессии public void session. Created(Http. Session. Event event) { log("session. Created('" + event. get. Session(). get. Id() + "')"); } // регистрация разрушения сессии public void session. Destroyed(Http. Session. Event event) { log("session. Destroyed('" + event. get. Session(). get. Id() + "')"); } 24
Указание слушателей в Net. Beans В файле Web. xml: <listener> <listener-class>listeners. Context. Listener</listener-class> </listener> <listener-class>listeners. Session. Listener</listener-class> </listener> 25
Указание слушателей в Net. Beans 26
7 Обработка событий и прослушиватели.ppt