Servlet监听器三

感知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:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值