zoukankan      html  css  js  c++  java
  • session活化与钝化

    会话的持久化:

    本篇解决一个问题,就是当正在浏览页面的时候服务器突然关闭,浏览器不关闭,当再次开启服务器时还能够恢复关闭时的页面

    HttpSessionActivationListener 
    实现此接口的JavaBean,可以感知自己被活化(从硬盘到内存)和钝化(从内存到硬盘)的过程。
    如果需要同时保存Session中的JavaBean则JavaBean也要实现Serializable序列化接口。
    实现此接口的JavaBean与HttpSessionBindingListener一样,不必配置到web.xml中。
    要实现此功能,必须要先配置以下信息:

    第一步:书写一个JavaBean,并实现HttpSessionActivationListener接口如下:

    第二步:JSP页面,判断是否存在Person,如果没有将Person放到Session中:

    第三步:配置Tomcat的Server.xml文件或是将配置好的xml发布文件放到CATALIINA_HOMEconfCatalinalocalhost目录下:

    配置文件如下:
    directory=“d:/a”是指Session文件保存的目录。

    第四步:测试

    1:多次开启新的浏览器窗口,并记录SESSIONID。
    2:使用shutdown.bat关闭tomcat应用。
    3:观察指定的目录下是否存在*.session文件。
    4:再次重新启动tomcat,并使用http://localhost:8080/project;jsessionid=xxxxx指定sessionid的方式访问服务器(如果浏览器没关闭的话就不用带上jsessionid)。
    5:观察是否为关闭tomcat之前的同一个Session。
    6:一般情况下,PersistentManager持久化Session与Cookie共同使用。
    7:HttpSessionActivationListener只做为监听类,监听自己是否钝化或是活化。

    示例代码如下:

    Person.java

    1.  
      package cn.hncu.domain;
    2.  
       
    3.  
      import java.io.Serializable;
    4.  
       
    5.  
      import javax.servlet.http.HttpSessionActivationListener;
    6.  
      import javax.servlet.http.HttpSessionEvent;
    7.  
       
    8.  
      public class Person implements Serializable, HttpSessionActivationListener {
    9.  
      private String name;
    10.  
       
    11.  
      public Person(String name) {
    12.  
      this.name = name;
    13.  
      }
    14.  
       
    15.  
      @Override
    16.  
      public void sessionDidActivate(HttpSessionEvent arg0) {
    17.  
      System.out.println(this+"从硬盘读取并活化了");
    18.  
      }
    19.  
       
    20.  
      @Override
    21.  
      public void sessionWillPassivate(HttpSessionEvent arg0) {
    22.  
      System.out.println(this+"保存到硬盘");
    23.  
      }
    24.  
       
    25.  
      @Override
    26.  
      public String toString() {
    27.  
      return "Person [name=" + name + "]---"+super.toString();
    28.  
      }
    29.  
      }


    index.jsp

    1.  
      <%@page import="java.text.SimpleDateFormat"%>
    2.  
      <%@ page language="java" import="java.util.*,cn.hncu.domain.Person" pageEncoding="UTF-8"%>
    3.  
       
    4.  
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    5.  
      <html>
    6.  
      <head>
    7.  
      </head>
    8.  
       
    9.  
      <body>
    10.  
      <h2>演示session钝化与活化技术</h2>
    11.  
      <%
    12.  
      if (session.getAttribute("p")==null){
    13.  
      Person p=new Person(""+new Random().nextInt(100));
    14.  
      session.setAttribute("p", p);
    15.  
      }
    16.  
      System.out.println(session.getId()+"---"+session.getAttribute("p"));
    17.  
      SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    18.  
      Date d=new Date(session.getCreationTime());
    19.  
      System.out.println(sdf.format(d));
    20.  
      %>
    21.  
      </body>
    22.  
      </html>

    配置xml文件:aa.xml

    1.  
      <Context path="/sessionActivationWeb" docBase="D:/Workspaces/MyEclipseBlue2014/sessionActivationWeb/WebRoot">
    2.  
      <Manager className="org.apache.catalina.session.PersistentManager"
    3.  
      saveOnRestart="true">
    4.  
      <Store className="org.apache.catalina.session.FileStore"
    5.  
      directory="d:/a"> </Store>
    6.  
      </Manager>
    7.  
      </Context>

    然后关于浏览器访问,这里要说一下;就是在浏览器上的http://localhost:8080/的后面要加上的不是项目名,而是上面配置的xml文件的名字,我这里这个文件名是叫aa.xml,因此在访问的时候我输的是http://localhost:8080/aa,因此你可以将这个xml文件的文件名改为你的项目名。

    第一次启动时输出信息如下:

    此时关闭服务器:

    d盘a目录下生成如下文件:

    此时在其启动服务器,然后刷新浏览器(若浏览器已经关闭,访问时请带上上次访问的jsessionid):

    输出信息如下:

    对比一下第一次访问时的信息,发现完全一样的

  • 相关阅读:
    Android访问数据库(SQL Server 和 MySQL)
    Andriod开发环境搭建
    SQL 学习记录
    安装双系统 win7 + ubuntu 15.04
    SQL资料
    电脑使用
    python_L7
    ONE
    网页性能优化
    js的继承
  • 原文地址:https://www.cnblogs.com/eaglesour/p/9474540.html
Copyright © 2011-2022 走看看