HttpSessionActivationListener ------会话的持久化:
*实现此接口的JavaBean,可以感知自己被活化(从硬盘到内存)和钝化(从内存到硬盘)的过程。
*如果需要同时保存Session中的JavaBean则JavaBean也要实现Serializable序列化接口。
*实现此接口的JavaBean与HttpSessionBindingListener一样,不必配置到web.xml中。
第三步:配置Tomcat的Server.xml文件或是将配置好的xml发布文件放到CATALIINA_HOME\conf
\Catalina\localhost目录下:(绿色发布项目的方式)
directory=“d:/a”是指Session文件保存的目录。
docBase="E:/MyEclipse10_workspace/sessionActivationWeb/WebRoot">是指你项目在MyEclipse保存的路径
saveOnRestart="true"这个值就是你是否进行session活化钝化
a.xml<Context path="/sessionActivationWeb"
docBase="E:/MyEclipse10_workspace/sessionActivationWeb/WebRoot">
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true">
<Store className="org.apache.catalina.session.FileStore"
directory="d:/a"> </Store>
</Manager>
</Context>
<------代码演示--------->
index.jsp
<body>
<%if(session.getAttribute("p")==null){
int n = new Random().nextInt(100);
Person p = new Person("Jack"+n);
session.setAttribute("p", p);
}
System.out.println(session.getId()+"--"+ session.getAttribute("p"));
Date d = new Date( session.getCreationTime() );
System.out.println( new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d) );
%>
</body>
Person.java
ublic class Person implements HttpSessionActivationListener,Serializable{
private String name;
public Person(String name) {
this.name = name;
}
public Person() {
}
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("被保存到硬盘了:"+name);
}
@Override
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("从硬盘活化了:"+name);
}
//当浏览器重新访问的时候session还存在session中的person对象也没变
*实现此接口的JavaBean,可以感知自己被活化(从硬盘到内存)和钝化(从内存到硬盘)的过程。
*如果需要同时保存Session中的JavaBean则JavaBean也要实现Serializable序列化接口。
*实现此接口的JavaBean与HttpSessionBindingListener一样,不必配置到web.xml中。
要实现此功能,必须要先配置以下信息:(代码演示)
第一步:书写一个JavaBean,并实现HttpSessionActivationListener接口如下:
第二步:JSP页面,判断是否存在Person,如果没有将Person放到Session中:第三步:配置Tomcat的Server.xml文件或是将配置好的xml发布文件放到CATALIINA_HOME\conf
\Catalina\localhost目录下:(绿色发布项目的方式)
directory=“d:/a”是指Session文件保存的目录。
docBase="E:/MyEclipse10_workspace/sessionActivationWeb/WebRoot">是指你项目在MyEclipse保存的路径
saveOnRestart="true"这个值就是你是否进行session活化钝化
a.xml<Context path="/sessionActivationWeb"
docBase="E:/MyEclipse10_workspace/sessionActivationWeb/WebRoot">
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true">
<Store className="org.apache.catalina.session.FileStore"
directory="d:/a"> </Store>
</Manager>
</Context>
<------代码演示--------->
index.jsp
<body>
<%if(session.getAttribute("p")==null){
int n = new Random().nextInt(100);
Person p = new Person("Jack"+n);
session.setAttribute("p", p);
}
System.out.println(session.getId()+"--"+ session.getAttribute("p"));
Date d = new Date( session.getCreationTime() );
System.out.println( new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d) );
%>
</body>
Person.java
ublic class Person implements HttpSessionActivationListener,Serializable{
private String name;
public Person(String name) {
this.name = name;
}
public Person() {
}
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("被保存到硬盘了:"+name);
}
@Override
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("从硬盘活化了:"+name);
}
//当浏览器重新访问的时候session还存在session中的person对象也没变