среда, 1 августа 2012 г.

pattern: Listener

    Назначение
    Определяет зависимость вида "один ко многим" между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом и автоматически обновляются.

    Использование шаблона в JDK
(примеры частично взяты с этого ресурса)

    Servlet API:
    - javax.servlet.ServletContextListener: contextInitialized(ServletContextEvent) - вызывается в момент старта приложения, contextDestroyed(ServletContextEvent sce) - вызывается в момент прекращения работы приложения.

    - javax.servlet.ServletContextAttributesListener

attributeAdded(ServletContextAttributeEvent) 
attributeRemoved(ServletContextAttributeEvent) 
attributeReplaced(ServletContextAttributeEvent) 


    - javax.servlet.http.HttpSessionListener: sessionCreated(HttpSessionEvent) оповещается при создании новой сессии, sessionDestroyed(HttpSessionEvent) оповещается при удалении сессии.

    - javax.servlet.http.HttpSessionAttributesListener: attributeAdded(HttpSessionBindingEvent) 
attributeRemoved(HttpSessionBindingEvent) 
attributeReplaced(HttpSessionBindingEvent) 

    - javax.servlet.ServletRequestListener: requestInitialized(ServletRequestEvent) оповещается при "входе" запроса на сайт, requestDestroyed(ServletRequestEvent) оповещается при "выходе" запроса с сайта.
    - javax.servlet.ServletRequestAttributeListener:

attributeAdded(ServletRequestAttributeEvent) 
attributeRemoved(ServletRequestAttributeEvent) 
attributeReplaced(ServletRequestAttributeEvent)  
    - javax.servlet.AsyncListener


onComplete(AsyncEvent) 
onError(AsyncEvent) 
onStartAsync(AsyncEvent) 
onTimeout(AsyncEvent) 
    - javax.servlet.http.Http.HttpSessionActivationListener

sessionDidActivate(HttpSessionEvent) 
sessionWillPassivate(HttpSessionEvent) 
    - javax.servlet.http.HttpSessionBindingListener

valueBound(HttpSessionBindingEvent) 
valueUnbound(HttpSessionBindingEvent) 




----------------------------------------------------------------
Декларативная регистрация "наблюдателя" в web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
    <listener>
        <listener-class>
            com.listeners.MyContextListener
        </listener-class>
    </listener>
</web-app>