セッションで使用する一時ファイルを作成する Java サーブレットに取り組んでいます。セッションの最後 (つまり、ユーザーの「ログアウト」) で、一時ファイルを削除してから、ユーザーを最初の (「ログイン」) ページにリダイレクトする必要があります。リダイレクトは正常に機能しますが、一時ファイルはそのまま残ります。
ファイルへのパスと関係があると思いますが、何が原因かはよくわかりません。セッションの開始時にファイルを作成します。
String path = request.getSession().getServletContext().getRealPath("/");
File file = File.createTempFile("getter", ".html", new File(path + "/tmp/"));
次に、セッションを閉じるときに、次のことを行います。
file.delete();
については知ってfile.deleteOnExit()
いますが、いつサーブレットを終了しますか? おそらく私は混乱していますが、何か助けていただければ幸いです!:)
前もって感謝します!
編集
だから、ここにいくつかの詳細があります:
先ほど言ったように、当面はセッションを処理せずにサーブレットを使用しています。セッションを実装する必要があるという@Joopに同意しますが、当面は簡単なテストを行いたいだけです。
したがって、私のサーブレットはハグルGET
してPOST
リクエストします。リクエストでフラグを使用して、ファイル (クラスで として宣言されている) を新しい一時ファイルPOST
にインスタンス化する内部関数を呼び出します。private File file;
連続した呼び出しでは、ファイルが取り込まれて保存されます。ユーザーに表示されるページには、サーブレット (「this」、つまり「this」) を参照するアンカーがあり、パラメーターとしてフラグ (「ログアウト」を示すフラグ) を渡します。次に、以前にインスタンス化されたファイルを削除する別の内部関数を呼び出します。
セッションの問題である場合は、マネージャーを実装し、調査結果を投稿します。
編集2
を実装しましたHttpSessionListener
が、すべて正常に動作しているようです。ここで、セッションの作成時に、以前に宣言したディレクトリでファイルをインスタンス化します (これは一時ファイルではないことに注意してくださいFile file = new File(path + "/tmp/" + req.getSession().getId() + ".html");
。ファイルの名前がセッション ID と同じになるように使用します)。次に、セッションに属性を追加します。この属性の値は、ファイルへのフル パスです。いつものようにファイルにデータを入力し、ユーザーがログアウトを選択すると、セッションを無効にします。次に、リスナー内でファイルへのパスを取得するため、ファイルへのポインターを取得できます。
String fname = ev.getSession().getAttribute("filename").toString();
File f = new File(fname);
f.delete();
だから、私が得ているメッセージは肯定的です。つまり、f.delete()
trueを返します。この後、私はそうf.exists()
しますfalse
。だから大丈夫なはずです。ただし、ファイルは物理的に存在します。つまり、ファイルはまだディスク上に存在しています。
@A4L から親切に提供された例を試すことができます。私は何か間違ったことをした..?