HttpSessionBindingListener接口
在使用JavaBean对象时经常会判断该对象是否绑定到Session域中,为此,Servlet API中专门提供了HttpSessionBindingListener接口,该接口用于监听JavaBean对象绑定到HttpSession对象和从HttpSession对象解绑的事件。HttpSessionBindingListener接口中共定义了两个事件处理方法,分别是valueBound()方法和valueUnbound()方法,接下来针对这两个方法进行讲解。
1、valueBound()方法
valueBound()方法的完整语法定义如下:
public void valueBound(HttpSessionBindingEvent event)
当对象被绑定到HttpSession对象中,Web容器将调用对象的valueBound()方法并传递一个HttpSessionBindingEvent类型的事件对象,程序可以通过这个事件对象来获得将要绑定到的HttpSession对象。
2、valueUnbound()方法
valueUnbound()方法的完整语法定义如下:
public void valueUnbound(HttpSessionBindingEvent event)
当对象从HttpSession对象中解除绑定时,Web容器同样将调用对象的valueUnbound()方法并传递一个HttpSessionBindingEvent类型的事件对象。
为了熟悉上述方法,接下来通过一个案例来演示如何监听绑定到Session域中的对象,如例1所示。
例1 MyBean.java
1 package cn.itcast.chapter05.listener;
2 import javax.servlet.http.*;
3 public class MyBean implements HttpSessionBindingListener {
4 // 该方法被调用时,打印出对象将要被绑定的信息
5 public void valueBound(HttpSessionBindingEvent hbe) {
6 System.out.println("MyBean对象被添加到了Session域..."+
7 this);
8 }
9 // 该方法被调用时,打印出对象将要被解绑的信息
10 public void valueUnbound(HttpSessionBindingEvent hbe) {
11 System.out.println("MyBean对象从Session中移除了..."+this);
12 }
13 }
在chapter05工程的WebContent根目录中,编写一个testbinding.jsp页面,在这个页面中将MyBean对象保存到Session对象中,然后从Session对象中删除这个MyBean对象,以查看MyBean对象感知自己的Session绑定事件,如例2所示。
例2 testbinding.jsp
1 <%@ page language="java" contentType="text/html;
2 charset=utf-8" pageEncoding="utf-8"
3 import="cn.itcast.chapter05.listener.MyBean"%>
4 <html>
5 <head>
6 <title>Insert title here</title>
7 </head>
8 <body>
9 <%
10 session.setAttribute("myBean", new MyBean());
11 %>
12 </body>
13 </html>
启动Web服务器打开IE浏览器在地址栏中输入http://localhost:8080/chapter05/testbinding.jsp
,访问testbinding.jsp页面,此时,控制台窗口中显示的结果如图1所示。
图1 控制台窗口
从图1可以看出,当第一次访问testbinding.jsp页面时,MyBean对象会被添加到Session域中,刷新浏览器,此时会显示另一个对象添加到了Session域中,第一个被添加的对象会从Session域中被移除,也就是说第二个添加的对象覆盖了第一个添加的对象。