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):

    输出信息如下:

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

  • 相关阅读:
    poj 3280 Cheapest Palindrome(区间DP)
    POJ 2392 Space Elevator(多重背包)
    HDU 1285 定比赛名次(拓扑排序)
    HDU 2680 Choose the best route(最短路)
    hdu 2899 Strange fuction (三分)
    HDU 4540 威威猫系列故事――打地鼠(DP)
    HDU 3485 Count 101(递推)
    POJ 1315 Don't Get Rooked(dfs)
    脱离eclipse,手动写一个servlet
    解析xml,几种方式
  • 原文地址:https://www.cnblogs.com/eaglesour/p/9474540.html
Copyright © 2011-2022 走看看