dataservlet.java

来自「JAVA Servlet2.3外文书籍源码」· Java 代码 · 共 98 行

JAVA
98
字号
package persistence.servlet;

import java.io.*;
import java.util.Hashtable;
import javax.servlet.*;
import javax.servlet.http.*;

public class DataServlet extends HttpServlet implements Serializable {

  private static Hashtable data;
  private static ServletContext ctx;
  private static String filename;

  public void init() throws ServletException {
    // Determine whether the servlet has been initialized.
    if (filename == null) {
      System.out.println("Initializing the data servlet...");
      // Obtain the file name of the serialized file.
      filename = getServletConfig().getInitParameter("DataServletOutput");
      ctx = getServletContext();

      // Determine whether a serialized file exists.
      if (!readSerialized()) {
        readResource();
      }
    }
  }


  private void readResource() {
    System.out.println("Reading from resource...");
    data = new Hashtable();
    // Read data from an external data source.
  }

  private void writeSerialized() {
    System.out.print("Attempting to write object...");
    ObjectOutputStream out = null;
    try {
      out = new ObjectOutputStream(new FileOutputStream(filename));
      out.writeObject(data);
      out.flush();
      System.out.println("success!");
    } catch (Throwable t) {
      System.out.println("failed!");
      ctx.log("DataServlet", t);
    } finally {
      if (out != null) {
        try {
          out.close();
        } catch (Throwable ignored) {}
      }
    }
  }


  private boolean readSerialized () {
    System.out.print("Attempting to read object...");
    File f = new File(filename);
    ObjectInputStream in = null;

    try {
      if (f.exists ()) {
        in = new ObjectInputStream(new FileInputStream(f));
        data = (Hashtable) in.readObject();
        System.out.println("success!");
        return true;
      }
      System.out.println("file does not exist!");

    } catch (Throwable t) {
      System.out.println("failed!");
      ctx.log("DataServlet", t);
    } finally {
      if (in != null) {
        try {
          in .close();
        } catch (Throwable ignored) {}
      }
      // Delete the file after it has been used.
      if (f.exists()) {
        try {
          f.delete();
        } catch (Throwable io) {
          ctx.log("DataServlet", io);
        }
      }
    }
    return false;
  }

  
  public void destroy() {
    System.out.println("Destroying...");
    writeSerialized();
    super.destroy();
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?