当前位置: 代码迷 >> J2EE >> [Java EE 七] 事件监听器
  详细解决方案

[Java EE 七] 事件监听器

热度:608   发布时间:2016-04-19 22:43:14.0
[Java EE 7] 事件监听器
事件监听器提供了 ServletContext、HttpSession 和 ServletRequest  对象生命周期的回掉事件。

事件监听器类需要实现接口,用于接收这些对象状态发生改变时所发出的通知。

每个监听器都可以通过 @WebListener、或 web.xml、 或 ServletContext.addListener 方法来进行注册。

同一个事件,可能注册了多个监听器进行监听,容器会按照监听器的顺序依次调用监听器的方法。但是在应用程序关闭的时候,监听器会反序调用。

实现 ServletContextListener 用于监听 servlet 上下文的初始化和销毁:

@WebListenerpublic class MyContextListener implements ServletContextListener {  @Override  public void contextInitialized(ServletContextEvent sce) {    ServletContext context = sce.getServletContext();    //. . .  }  @Override  public void contextDestroyed(ServletContextEvent sce) {    //. . .  }}


实现 ServletContextAttributeListener 用于监听 servlet 上下文中属性的改变:

public class MyServletContextAttributeListener              implements ServletContextAttributeListener {  @Override  public void attributeAdded(ServletContextAttributeEvent event) {    //. . . event.getName();    //. . . event.getValue();  }  @Override  public void attributeRemoved(ServletContextAttributeEvent event) {    //. . .  }@Override  public void attributeReplaced(ServletContextAttributeEvent event) {    //. . .  }}


实现 HttpSessionListener 用于监听 session 的创建和销毁:

@WebListenerpublic class MySessionListener implements HttpSessionListener {  @Override  public void sessionCreated(HttpSessionEvent hse) {    HttpSession session = hse.getSession();    //. . .  }  @Override  public void sessionDestroyed(HttpSessionEvent hse) {    //. . .  }}


实现 HttpSessionActivationListener 用于监听 session 激活与失活:

public class MyHttpSessionActivationListener              implements HttpSessionActivationListener {  @Override  public void sessionWillPassivate(HttpSessionEvent hse) {    // ... hse.getSession();  }@Override  public void sessionDidActivate(HttpSessionEvent hse) {    // ...  }    }


实现 HttpSessionAttributeListener 用于监听 session 中属性的改变:

public class MyHttpSessionAttributeListener              implements HttpSessionAttributeListener {  @Override  public void attributeAdded(HttpSessionBindingEvent event) {    HttpSession session = event.getSession();    //. . . event.getName();    //. . . event.getValue();  }  @Override  public void attributeRemoved(HttpSessionBindingEvent event) {    //. . .  }  @Override  public void attributeReplaced(HttpSessionBindingEvent event) {    //. . .  }    }


实现 HttpSessionBindingListener 用于监听对象绑定到 session,或对象从 session 解除:

public class MyHttpSessionBindingListener              implements HttpSessionBindingListener {  @Override  public void valueBound(HttpSessionBindingEvent event) {    HttpSession session = event.getSession();    //. . . event.getName();    //. . . event.getValue();  }  @Override  public void valueUnbound(HttpSessionBindingEvent event) {    //. . .  }    }


实现 ServletRequestListener 用于监听 request 对象的创建和销毁:

@WebListenerpublic class MyRequestListener implements ServletRequestListener {  @Override  public void requestDestroyed(ServletRequestEvent sre) {    ServletRequest request = sre.getServletRequest();    //. . .  }  @Override  public void requestInitialized(ServletRequestEvent sre) {    //. . .  }}


实现 ServletRequestAttributeListener 用于监听 request 对象上属性的改变。

还有 AsyncListener 用于监听异步事件,比如操作完成、操作超时、操作错误等。

除了用 @WebListener 和 web.xml 定义监听器之外,也可以调用 ServletContext.addListener 方法在代码中定义监听器。可以在 ServletContainerInitializer.onStartup 或 ServletContextListener.contextInitialized 方法中做添加监听器的操作。

ServletContainerInitializer.onStartup 将会在应用程序启动的时候调用:public class MyInitializer implements ServletContainerInitializer {  public void onStartup(Set<Class<?>> clazz, ServletContext context) {    context.addListener("org.example.MyContextListener");  }}


文章来源:http://www.aptusource.org/2014/04/java-ee-7-event-listener/
  相关解决方案