• 在JavaGUI编程中,需要注册所要监听的事件,而在Java Web编程中则是在web.xml中配置所要监听的事件,由Web容器在特定事件发生时自动调用特定的实现监听器接口的类的特定方法。
• Servlet API 2.3以上版本提供了8个监听器接口,涉及了6种事件类型。
– ServletContextListener:应用上下文生命周期监听器。用于监听Web应用的启动和销毁事件。
• Javax.servlet.ServletContextListener接口中定义了两个方法:contextInitialized()和contextDestroyed()方法,接受ServletContextEvent类型的事件。
• 需配置web.xml文件。
• 当在Web应用中部署了实现该接口的实现类后,在Web容器加载Web应用时(例如启动服务器)就会自动调用contextInitialized()方法,而当Web容器销毁Web应用时(例如关闭服务器),会自动调用contextDestroyed()方法。
– ServletContextAttributeListener:应用上下文属性事件监听器。用于监听Web应用上下文中的属性改变的事件。
• 定义三个方法:attributeAdded()、attributeReplaced()和attributeRemoved()方法,接受ServletContextAttributeEvent事件。
• 需配置web.xml文件。
• 在Web应用中部署了实现该接口的实现类以后,每当ServletContext对象中增加新的属性、同名属性的内容被替换、属性被删除时会调用以上三个方法。
– ServletRequestListener:请求生命周期监听器。用于监听请求的创建和销毁事件。
• 定义了两个方法:requestInitialized()和requestDestroyed()方法,接受ServletRequestEvent类型的事件。
• 需配置web.xml文件。
• 当在Web应用中部署了实现该接口的实现类后,在HttpServletRequest对象建立或者被销毁时,由Web容器自动调用上述两个方法。
– ServletRequestAttributeListener:请求属性事件监听器。用于监听请求中的属性改变的事件。
• 定义三个方法:attributeAdded()、attributeReplaced()和attributeRemoved()方法,接受ServletRequestAttributeEvent事件。
• 需配置web.xml文件。
• 在Web应用中部署了实现该接口的实现类以后,每当Request对象中增加新的属性、同名属性的内容被替换、属性被删除时会调用以上三个方法。
– HttpSessionListener:会话生命周期监听器。用于监听会话的创建和销毁事件。该接口中定义了两个需要实现的方法,一个是sessionCreated(),另一个是sessionDestroyed(),它们都接受HttpSessionEvent类型的事件。
• 如果在Web应用中使用了实现该监听接口的类,还需要修改web.xml文件,增加配置信息。
<listener>
<listener-class>com.web.listener.OnLineListener</listener-class>
</listener>
• 当在Web应用中部署了该接口的实现类以后,在会话对象被Servlet与JSP创建时,Web容器会自动调用该实现类的sessionCreated()方法,而当会话对象被销毁时,会自动调用实现类的sessionDestroyed()方法。
HttpSession session=request.getSession();
session.setAttribute(“username”,”SunWukong”);
session.invalidate();
– HttpSessionAttributeListener:会话属性事件监听器。用于监听会话中的属性改变的事件。
• 该接口中定义了三个需要实现的方法,attributeAdded()、attributeReplaced()、attributeRemoved()。它们接受HttpSessionBindingEvent类型的事件。
• 同样如果在Web应用中使用实现该监听接口的类,需修改web.xml文件,增加配置信息。
• 在Web应中部署了该接口的实现类后,每当会话对象增加新的属性时,Web容器会自动调用attributeAdded()。
• 当会话对象的同名属性的内容被替换时,Web容器自动调用attributeReplaced()方法;当会话对象的属性被移除时,容器自动调用attributeRemoved()方法。
session.setAttribute(“username”,”sunwuokong”);
session.setAttribute(“username”,”bajie”);
session.removeAttribute(“username”);
– HttpSessionBindingListener:会话值绑定事件监听器。这是唯一不需要在web.xml中设定的Listener。
• 定义了两个方法,valueBound()方法和valueUnbound()方法,都接受HttpSessionBingdingEvent类型的事件。
• 如果一个类实现了HttpSessionBindingListener接口,则当这个类的对象通过session.setAttribute()被绑定到session对象时,该对象的valueBound()方法被自动调用。
• 当这个对象从session中删除时(调用session.invalidate()和session.removeAttribute()或session对象过期),valueUnbound()方法将被自动调用
– HttpSessionActivationListener:会话激活和钝化事件监听器。用于监听会话的激活和钝化的事件。
• 定义了两个方法:sessionDidActivate()方法和sessionVillPassivate()方法。接受HttpSessionEvent类型的事件。
• 需要配置web.xml文件。
• Activate活化和pasivate钝化是Web容器为了更好地利用系统资源或者进行服务器负载平衡等原因而对特定对象采取的措施。
• 会话对象的钝化指的是暂时将会话对象通过对象序列化的方式储存到硬盘上,而会话对象的活化与钝化相反,Web容器把硬盘上储存的会话对象文件重新加载到Web容器中。
– 如果我们的Web应用并没有部署到实现了负载平衡的多台服务器中,一般来说,我们没有使用实现该接口的类的需求。