开发者学堂课程【Servlet 入门:监听器之 HttpSessionActivation】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/38/detail/889
监听器之 HttpSessionActivation
内容介绍
一、HttpSessionActivation
一、HttpSessionActivation
注意:因为钝化和活化 session,其实就是使用序列化和反序列化技术把 session 从内存保存到硬盘,和把 session 从硬盘加载到内存。
这说明如果 Person 类没有实现serializable,接口,那么当 session 钝化时就不会钝化 Person,而是把 Person 从 session 中移除再钝化!这也说明 ession 活化后, session 中就不在有 Person 对象了。
示例步骤:
先不管H ttpSessionA.ctivationListener 监听器接口,先来配置 Tomcat钝化 session 的参数,把
下面配置文件放到tomcat\conf\catalina\localhost目录下!文件名称为项目名称。
"
org.apache.catalina.session.PresistentManger
"
(maxIdl9swap="1"
"
org.apache.catalina.session.FileStore"(directory="mysession")/>
访问项目的 index.jsp 页面,这会使 Tomcat 创建 Session 对象,然后等待一分钟后,查看
Tomcat\work\Catalina\localhost\istenermysession.目录下是否会产生文件,如果产生了,说明钝化session 的配置成功了,可以开始下一步了。
要实现上述的例子,我们首先创建一个类。
然后输入以下代码:
package cn.itcast;
import javax.servlet.http.HttpsessionActivationListener;
import javax.servlet.http.HttpsessionEvent;
public class User implements HttpsessionActivationListener {
public void sessionwillPassivate(HttpsessionEvent se){
system.out.println ( "
啊~我陪
session
去火星了,地球已经不安全了
!
");
}
Public void sessionDidActivate(HttpSessionEvent se){
system.out.println("啊~我和
session
一起重返地球了
! ");
}
}
而 a.jsp 中也将24行更改为 new cn.itcast.User()。而b.jsp不做更改。
之后再重新启动以下服务器。打开网页输入 a.jsp 保存数据再输入 b.jsp 只能看见一个 usual 类的 toString 方法。
之后我们就会发现小 usual 并没有陪 session 一起钝化硬盘上,因为小usual已经死了。因为他已经添加到了 session 里面,而过了一分钟会显示“啊~我陪 session 去火星了,地球已经不安全了!”说明小 usua l已 经死了并不在硬盘上。就好比:session 和小 usual 一起上了去往火星的车而在临上车前,小usual却因为没有票而被赶下来了。而地球毁灭的时候,小 usual 因为没有上车而毁灭了。
而之后我们如果做一个访问的过程。Session 中的小 usual 并不会再出现。
而所谓的火星就是该文件家mysession。只有在此实现了序列化的接口,对象就无法到此。任何能被序列化的接口都必须满足一个前提就是实现序列化接口,而usual 并没有满足序列化接口,所以才“死掉了”。
我们可以根据以下操作来查看我刚刚的字符串类是否实现序列化接口,我们可以看出 string 类型是有的。而 usual 并不可以。
为了保证这一问题我们在第6行加上 java.io.Serializable。这回 usual 就可以跟着session 一起到硬盘之上。
在网站上输入 a.jsp 保存数据,b.jsp 输出。这时就会显示出,表示此事 usual 有了序列化借口。而此时接口的作用就是来监听我们的 usual 是否跟随 session 钝化和活化,并没有实际意义,只不过拿来理解而已。