购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.2 监听器Listener

在Servlet容器中,可通过定义监听器对象对事件进行监听和产生反应。例如监听ServletContext对象的生命周期变化情况及ServletContext对象中属性的变化情况,也可以监听HttpSession对象的生命周期变化情况及HttpSession对象中属性的变化情况,然后分别做出反应(如在线人数统计等)。

5.2.1 Listener简介

在定义监听器类时只需实现相应的监听器接口即可。例如实现了ServletContextListener接口和ServletContextAttributeListener的类就可以监听到ServletContext对象的生命周期变化情况及ServletContext对象中属性的变化情况,实现了HttpSessionListener接口和Http SessionAttributeListener接口的类就可以监听到HttpSession对象的生命周期变化情况及HttpSession对象中属性的变化情况。

当某个事件发生时,Servlet容器将自动去调用监听器类的与之对应的方法。下面列出了常见的事件与监听器接口方法的对应关系。

ServletContextListener接口监听ServletContextEvent事件见表5-1。

表5-1 ServletContextListener接口中的方法

ServletContextAttributeListener接口监听ServletContextAttributeEvent事件见表5-2。

表5-2 ServletContextAttributeListener接口中的方法

HttpSessionListener接口监听HttpSessionEvent事件见表5-3。

表5-3 HttpSessionListener接口中的方法

HttpSessionAttributeListener接口监听HttpSessionBindingEvent事件见表5-4。

表5-4 HttpSessionAttributeListener接口中的方法

5.2.2 Listener的一般使用步骤

在Java Web应用中使用监听器的一般步骤如下。

(1)编写一个实现某个Listener接口的监听器类,如:

(2)实现监听器类中相应的方法,针对监听到的事件做出反应,如:

(3)将监听器类配置到web.xml文件中,如:

(4)正常使用。

5.2.3 Listener的应用实例

在本实例中共创建两个Listener实例分别用于监听ServletContext、HttpSession对象生命周期及ServletContext、HttpSession对象中属性变化情况。

首先创建一个用于监听ServletContext对象生命周期及ServletContext对象中属性变化情况的监听器MyContextListener(见例程5-6),MyContextListener分别实现了ServletContextListener接口和ServletContextAttributeListener接口。

然后再创建一个用于监听HttpSession对象生命周期及HttpSession对象中属性变化情况的监听器MySessionListener(见例程5-7),MySessionListener分别实现了HttpSessionListener接口和HttpSessionAttributeListener接口。

接下来,在web.xml(见例程5-8)中配置MyContextListener和MySessionListener,使之生效。

最后创建两个测试用的JSP页面index.jsp(见例程5-9)与logout.jsp(见例程5-10),在JSP页面中通过对ServletContext、HttpSession对象中属性的新增与调整来激发相应的过滤器。

例程5-6 MyContextListener.java

例程5-7 MySessionListener.java

例程5-8 web.xml

例程5-9 测试用JSP页面index.jsp

例程5-10 测试用JSP页面logout.jsp

运行效果如图5-3 和图5-4所示。

图5-3 监听器在控制台上输出的信息

图5-4 index.jsp与logout.jsp运行效果

本实例的完整源代码请参考配套光盘的“源代码”部分。 05ZUGk1lo2UbAu/3spn8QWKHQvQAXJ9lsPhts3hcnXqcx/h+ubgsY67S5ifPR4hj

点击中间区域
呼出菜单
上一章
目录
下一章
×