[Java EE 7] 事件监听器
程序员文章站
2022-04-26 08:37:26
...
事件监听器提供了 ServletContext、HttpSession 和 ServletRequest 对象生命周期的回掉事件。
事件监听器类需要实现接口,用于接收这些对象状态发生改变时所发出的通知。
每个监听器都可以通过 @WebListener、或 web.xml、 或 ServletContext.addListener 方法来进行注册。
同一个事件,可能注册了多个监听器进行监听,容器会按照监听器的顺序依次调用监听器的方法。但是在应用程序关闭的时候,监听器会反序调用。
实现 ServletContextListener 用于监听 servlet 上下文的初始化和销毁:
实现 ServletContextAttributeListener 用于监听 servlet 上下文中属性的改变:
实现 HttpSessionListener 用于监听 session 的创建和销毁:
实现 HttpSessionActivationListener 用于监听 session 激活与失活:
实现 HttpSessionAttributeListener 用于监听 session 中属性的改变:
实现 HttpSessionBindingListener 用于监听对象绑定到 session,或对象从 session 解除:
实现 ServletRequestListener 用于监听 request 对象的创建和销毁:
实现 ServletRequestAttributeListener 用于监听 request 对象上属性的改变。
还有 AsyncListener 用于监听异步事件,比如操作完成、操作超时、操作错误等。
除了用 @WebListener 和 web.xml 定义监听器之外,也可以调用 ServletContext.addListener 方法在代码中定义监听器。可以在 ServletContainerInitializer.onStartup 或 ServletContextListener.contextInitialized 方法中做添加监听器的操作。
文章来源:http://www.aptusource.org/2014/04/java-ee-7-event-listener/
事件监听器类需要实现接口,用于接收这些对象状态发生改变时所发出的通知。
每个监听器都可以通过 @WebListener、或 web.xml、 或 ServletContext.addListener 方法来进行注册。
同一个事件,可能注册了多个监听器进行监听,容器会按照监听器的顺序依次调用监听器的方法。但是在应用程序关闭的时候,监听器会反序调用。
实现 ServletContextListener 用于监听 servlet 上下文的初始化和销毁:
@WebListener public 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 的创建和销毁:
@WebListener public 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 对象的创建和销毁:
@WebListener public 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/
下一篇: 苏黎世是哪个国家的?苏黎世风格有多美?