当Web应用在Web容器中运行时,Web应用内部会不断地发生各种事件:如Web应用被启动、Web应用被停止、用户session开始、用户session结束、用户请求到达等,可以用Servlet API提供的监听器来监听Web应用的内部事件,从而允许当Web内部事件发生时回调事件监听器内的方法。应用程序完全可以采用一个监听器类来监听多种事件,只要让该监听器实现类同时实现多个监听器接口即可。
常用的Web事件监听器接口:
(1)ServletContextListener:监听Web应用的启动和关闭
包含的方法:
contextInitialized(ServletContextEvent sce):启动Web应用时系统调用Listener的该方法,可通过ServletContextEvent取得该应用的ServletContext实例(sce.getServletContext())
contextDestroyed(ServletContextEvent sce):关闭Web应用时系统调用Listener的该方法
(2)ServletContextAttributeListener:监听ServletContext范围(application)内属性的改变。
包含的方法:
attributeAdded(ServletContextAttributeEvent event):当把一个属性存入application范围时触发该方法,可通过形参event.getName和event.getValue获取添加的属性名和属性值
attributeRemoved(ServletContextAttributeEvent event):当把一个属性从application范围删除时将触发该方法,可通过形参event.getName和event.getValue获取删除的属性名和属性值
attributeReplaced(ServletContextAttributeEvent event):当程序替换application范围内的属性时将触发该方法,可通过形参event.getName和event.getValue获取替换后的属性名和属性值
(3)ServletRequestListener:监听用户请求
包含方法:
requestInitialized(ServletRequestEvent sre): 用户请求到达、被初始化时触发该方法,可通过形参sre.getServletRequest()获取request
requestDestroyed(ServletRequestEvent sre): 用户请求结束、被销毁时触发该方法
(4)ServletRequestAttributeListener:监听ServletRequest范围(request)内属性的改变
(5)HttpSessionListener:监听用户session的开始和结束
包含方法:
sessionCreated(HttpSessionEvent se):用户与服务器的会话开始、创建时触发该方法,通过形参se.getSession()获取session,
sessionDestroyed(HttpSessionEvent se):用户与服务器的会话断开、销毁时触发该方法
(6)HttpSessionAttributeListener:监听HttpSession范围(session)内属性的改变
配置Listener
只要向Web应用注册Listener实现类即可,无须配置参数之类的东西,若将ServletContextListener配置在容器中,且Web容器(支持Servlet 2.3以上规范)支持Listener,则该ServletContextListener将可以监听Web应用的启动、关闭。
(1)<listener>
<!--指定Listener的实现类-->
<listener-class>Listener实现类</listener-class>
</listener>
(2)@WebListener