域对象中属性变更的事件监听器用来监听ServletContext、HttpSession和HttpServletRequest这三个对象中的属性变更信息事件的监听器。这三个监听器接口分别是ServletContextAttributeListener、HttpSessionAttributeListener和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中属性的增加、删除和替换事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。
因此这里仅以HttpSessionAttributeListener为例展示该类监听器的使用方法;
HttpSessionAttributeListener 接口
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class SessionAttributeListener implements HttpSessionAttributeListener {
//session属性添加时执行
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("Session attributeAdded");
}
//session属性更改时执行
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("Session attributeRemoved");
}
//session属性删除时执行
public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.out.println("Session attributeReplaced");
}
}
SessionAttributeListener实现HttpSessionAttributeListener接口中的三个方法;每个方法中写入输出语句输出该方法的方法名;紧接着配置web.xml文件:
<listener>
<listener-class>online.yangxinbiao.SessionAttributeListener</listener-class>
</listener>
然后再分别创建三个jsp文件,这里以set.jsp、replace.jsp、remove.jsp为例;
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%session.setAttribute("name","Tom"); %>
</body>
</html>
上段代码是set.jsp的代码,因为replace.jsp的代码只需将 <%session.setAttribute("name","Tom"); %> 换成 <%session.setAttribute("name","Jerry"); %> ,而remove.jsp则是换成 <%session.removeAttribute("name"); %>;因此不再一一给出;注意:替换操作其实就是给原来存在的key值存入一个新的value值,如果已经点击了set链接,再点击set链接得到的结果和点击set链接后直接点击replace链接显示的效果是相同的;
当然还需要一个jsp来关联以上三个jsp,这里以index.jsp为例;
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="./set.jsp">set</a>
<br>
<a href="./replace.jsp">replace</a>
<br>
<a href="./remove.jsp">remove</a>
</body>
</html>
之后我们再访问index.jsp,分别点击set、replace、remove链接,即可在控制台显示我们监听session对象属性变更时的效果。