感知Session绑定的事件监听器:
保存在Session域中的对象可以有多种状态:绑定到Session中;从Session域中解除绑定;随Session对象持久化到一个存储设备中;随Session对象从一个存储设备中恢复;
Servlet规范中定义了两个特殊的监听器接口来帮助JavaBean对象了解自己在Session域中的这些状态:HttpSessionBindingListener接口和HttpSessionActivationListener接口,实现这两个接口的类不需要web.xml文件中进行注册。
下面就对上述连个接口进行实验:
1、找到名为“listener”的web项目内(我自己上午创建好的)
2、创建sessionActiveListener类,并且对应Serializable和HttpSessionActivationListener两个接口
3、创建三个jsp分别是,sessionIndex、sessionSet、sessionRemove
4、注意这个不需要在web.xml中进行注册!但是需要手动绑定引类,不然不能使用
sessionActiveListener类中代码如下:
package listener;
import java.io.Serializable;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
public class sessionActiveListener implements Serializable,HttpSessionActivationListener {
private static final long serialVersionUID = 7247264728166822750L;
private String id;
public sessionActiveListener(String id) {
super();
this.id = id;
}
//session被活化时
@Override
public void sessionDidActivate(HttpSessionEvent arg0) {
System.out.println("sessionDidActivate");
}
//session被钝化时
@Override
public void sessionWillPassivate(HttpSessionEvent arg0) {
System.out.println("sessionWillPassivate");
}
}
sessionIndex代码:
<%@ 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>
这是一个页面
<br>
<a href="./sessionSet.jsp">sessionSet</a>
<br>
<a href="./sessionRemove.jsp">sessionRemove</a>
</body>
</html>
sessionSet代码如下:
<%@ 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>
这是一个小页面
<br>
<a href="./sessionSet.jsp">sessionSet</a>
<br>
<a href="./sessionRemove.jsp">sessionRemove</a>
</body>
</html>
sessionRemove代码如下:
引类代码如下:
import="listener.sessionActiveListener"
<%@page import="listener.sessionBinding"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" import="listener.sessionActiveListener"
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.removeAttribute("active"); %>
</body>
</html>
然后我们打开浏览器输入127.0.0.1/listener/sessionIndex.jsp
我们点击stop关闭;
在控制台上会输出:
在此开启就会出现;
说明session被活化
我们对HttpSessionBindingListener接口进行实验:
1、找到名为“listener”的web项目
2、创建sessionBinding类,并且对应HttpSessionBindingListener接口
3、创建三个jsp分别是,sessionIndex、sessionSet、sessionRemove
4、注意这个不需要在web.xml中进行注册!但是也需要手动绑定引类,不然不能使用;
sessionBinding类中代码:
package listener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class sessionBinding implements HttpSessionBindingListener {
private int id;
public sessionBinding(int id) {
super();
this.id = id;
}
@Override
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println("valueBound");
}
@Override
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println("valueUnbound");
}
}
sessionIndex中代码:
<%@ 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>
这是一个小页面
<br>
<a href="./sessionSet.jsp">sessionSet</a>
<br>
<a href="./sessionRemove.jsp">sessionRemove</a>
</body>
</html>
sessionSet代码如下:
<%@page import="listener.sessionBinding"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" import="listener.sessionBinding"
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("bind", new sessionBinding(110)); %>
</body>
</html>
sessionRemove代码如下:
<%@page import="listener.sessionBinding"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" import="listener.sessionBinding"
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.removeAttribute("active"); %>
</body>
</html>
然后我们打开浏览器输入127.0.0.1/listener/sessionIndex.jsp
点击sessionSet
点击sessionRemove: