事件监听器提供了 ServletContext、HttpSession 和 ServletRequest 对象生命周期的回掉事件。
事件监听器类需要实现接口,用于接收这些对象状态发生改变时所发出的通知。
每个监听器都可以通过 @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/
分享到:
相关推荐
3. 事件监听器的使用,开发者可以通过这些监听器捕捉到应用中发生的各种事件,比如会话创建和销毁。 4. 非阻塞I/O操作的引入,这是通过Servlet 3.1规范中的新API实现的。非阻塞I/O可以让服务器在等待I/O操作完成时...
11. **JSF(JavaServer Faces)**:Java EE的一种UI组件框架,提供声明式UI编程和事件处理机制。 12. **CDI(Contexts and Dependency Injection)**:Java EE中的依赖注入框架,用于管理对象的生命周期和依赖关系...
4. **CDI 1.1 (Contexts and Dependency Injection)**:CDI 1.1提供了依赖注入的增强,包括事件监听器、异步执行、可选绑定和拦截器的改进。此外,它还引入了上下文感知的注入,使得对象可以在特定上下文中被创建和...
在Java EE环境中,`web.xml`文件是另一个关键的部署描述符,它包含了Web应用的整体配置,包括Servlet、过滤器和监听器的定义。而`web-jsptaglibrary_2_1.xsd`则更专注于JSP标签库的配置,是`web.xml`的一个补充。 ...
10. **Filter与Listener**:在Java EE中,Filter用于拦截请求并处理,而Listener则监听特定事件,如会话的创建和销毁。 这份Java EE教程将深入讲解这些技术,从基础概念到实际应用,通过实例演示如何使用它们来构建...
资料可能包括Servlet生命周期、服务方法、初始化参数、过滤器和监听器的使用等内容。 4. **JSP(Java Server Pages)**:JSP用于生成动态网页,结合HTML和Java代码。可能涵盖EL(Expression Language)、JSTL(Java...
8. **Contexts and Dependency Injection (CDI) 1.1**:CDI 1.1扩展了依赖注入的功能,包括异步bean、事件监听器和增强的拦截器模型。 9. **Batch Applications for the Java Platform (JSR 352)**:Java EE 7首次...
作为Java EE 7的一部分,Servlet 3.1提供了对异步处理的支持,以及更强大的过滤器和监听器功能。Petstore应用可能使用Servlet来处理HTTP请求,路由到适当的业务逻辑,并生成响应。 5. **EJB 3.2**: Enterprise ...
JAVA EE 开发手册 JavaEE是一个开放的、 基于标准的平台,用以开发、部署和管理N层结构、面向Web的,以服务器为中心的企业级应用。 JavaEE的具有可扩展性、性能和可靠性。 手册结构目录如下: 1、HTP协议 2、...
5. **CDI 1.0 (Contexts and Dependency Injection)**:CDI为Java EE应用提供了依赖注入和上下文管理,允许开发者轻松地注入依赖对象,同时支持事件、拦截器和可选绑定。 6. **JAX-RS 1.1 (Java API for RESTful ...
Servlet 2.5是Java EE 5中的标准,它增强了对异步处理的支持,并提供了过滤器和监听器等机制来增强应用的功能和灵活性。 2. **JSP(JavaServer Pages)**:JSP是一种用于创建动态网页的技术,允许开发者将HTML代码...
在Java EE 6中,Servlet 3.0规范引入了注解配置,允许开发者无需XML文件就能声明Servlet和过滤器,提高了代码的可读性和简洁性。此外,Servlet 3.0还支持异步处理,使得处理长运行任务成为可能。 JSP(JavaServer ...
此外,教程可能还会涵盖Web服务(如JAX-WS和JAX-RS)、过滤器(Filters)、监听器(Listeners)以及MVC设计模式等内容。通过学习这些知识,开发者能够具备构建复杂企业级应用的能力,为职业发展奠定坚实的基础。
6. **Servlet 2.5** 和 **JSP 2.1**:这两个版本的更新提升了Web容器的性能和稳定性,并增加了新的特性,如过滤器(Filter)、监听器(Listener)和EL(Expression Language)表达式的增强。 7. **WS-I (Web ...
5. **Servlet 3.0**:Servlet规范的第三个版本允许在web.xml之外进行动态部署,支持异步处理,增强了过滤器和监听器的功能,使得配置更加灵活。 6. **JavaServer Pages (JSP) 2.2**:JSP 2.2 提供了更好的EL表达式...
在Java EE 5中,Servlet 2.5规范引入了更强大的过滤器和监听器,支持注解配置,使得部署和配置更加简单。 2. **JSP(JavaServer Pages)**:JSP是一种动态网页技术,允许开发者将HTML代码与Java代码混合编写。Java ...
- Servlet 2.5:增强了Servlet规范,提供了对HTTP会话监听器、过滤器链和异步处理的支持。 - JPA (Java Persistence API) 1.0:首次引入,提供了一种标准的ORM(对象关系映射)机制,使Java应用可以直接操作数据库...
- **监听器**:监听特定事件的发生,并执行相应的动作。 - **类型**:`ServletContextListener`、`HttpSessionListener`、`ServletRequestListener` 等。 - **接口实现**:实现对应的监听器接口,如 `...
它定义了`web.xml`文件的结构,其中包含有关Web应用的信息,如Servlet、过滤器、监听器、会话配置等。 2. `ejb-jar_3_2.dtd`:这是Enterprise JavaBeans (EJB) 3.2规范的DTD,用于描述`ejb-jar.xml`文件,定义了EJB...