ファイルへの書き込み

場合によっては、出力を HTTP リクエストに送信するのではなく、サーブレットからファイルにデータを書き込むことがあります。このファイルは、テンポラリデータを保管したり、パーシスタンスメカニズムとして使用できます。このセクションでは、ファイルを Web アプリケーションのディレクトリや、ホットデプロイされた Web アプリケーションのために JRun が生成したテンポラリディレクトリに書き込む方法を説明します。

Web アプリケーションのルートディレクトリへの書き込み

サーブレットコンテキストを使用すると、Web アプリケーションのルートディレクトリへのパスを取得できます。このパスは、/<JRun のルートディレクトリ>/servers/<Web アプリケーション名> です。JRun サーバにはデフォルトで書き込み許可があるため、このパスを取得すると、このディレクトリ内のファイルに書き込みを行うことができます。

次の例では、簡単な文字列をファイルに書き込み、それを Web アプリケーションのルートディレクトリに保管します。

...
Properties sysprops = System.getProperties();
String c = sysprops.getProperty("file.separator");
PrintWriter out = response.getWriter();
String notes = "これは文字列です";
String filename = "file.txt";
String path = new String();
try {
  ServletContext sc = this.getServletContext();
  path = sc.getRealPath("/");
  FileOutputStream fos = new FileOutputStream(path + c + filename);
  byte[] bytes = notes.getBytes();
  fos.write(bytes);
  out.println("Created " + filename + " in " + path);
} catch (Exception e) {
  out.println(e.toString());
}
...

サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。

Web アプリケーションのテンポラリディレクトリへの書き込み

WAR ファイルや EAR ファイルを JRun サーバのルートディレクトリに配置して JRun のホットデプロイ機能を使用すると、JRun は/<JRun のルートディレクトリ>/servers/
<サーバ名>/SERVER-INF/temp/<アプリケーション名>- temp にテンポラリディレクトリを作成して、テンポラリ情報を保管します。javax.servlet.context.tempdir 属性を取得すると、このディレクトリにアクセスできます。次の例を使用すると、このディレクトリにファイルを書き込むことができます。

...
ServletContext context = this.getServletContext();
Properties sysprops = System.getProperties();
String c = sysprops.getProperty("file.separator");
try {
  File baseDir = 
(File) context.getAttribute("javax.servlet.context.tempdir");
  String fullpath = baseDir.getAbsolutePath() + c + "settings.txt";
  File f = new File(fullpath);
  FileOutputStream fout = null;
  fout = new FileOutputStream(fullpath);
  sysprops.store(fout, null);
  out.println("次のファイルが作成されました:" + f.getAbsolutePath());
} catch (Exception e) {
  e.printStackTrace();
}
...

このコード例では、ServletContext を使用して Web アプリケーションのテンポラリディレクトリを取得し、System オブジェクトのプロパティを使用して、ファイルセパレータを取得しています。このコードでは、システムプロパティが settings.txt と名付けられたファイルに保管されます。

サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。