私の最新のプロジェクトでは、データベースからの情報を使用してドキュメントを生成できます。
そこで、オンデマンドでドキュメントテンプレートをユーザーの一時フォルダーにコピーして変更します。これは、変更時にすべてのテンプレートを使用できる必要があるためです。
その後、ユーザーは私のウェブアプリからのダウンロードリンクを介してドキュメントを受け取ります。
私の質問:webappデータを保存するためのベストプラクティスはありますか? tempがいいと思いました。しかし、私は自分でデータを削除する必要があるので、Tomcat webappフォルダー内のWARフォルダーの横に配置することを考えました。
Windows 2003をTomcatのホストシステムとして使用しています。私はプロジェクトでGrailsを使用していますJavaとMaven ...この情報が必要かどうかわかりません。
編集:
この些細な質問をする主な理由は...一時データの作成/削除を担当する場合...システムで一時フォルダを使用することはまだ良い方法ですか?これについてはよくわかりません...
(機密)ユーザー固有のファイルをwebappに保存する場合は、_/WEB-INF
_のどこかに保存し、Servlet
を使用してそれらにアクセスします。これにより、(間接的に)ログインしたユーザーがチェックされます。ワールドワイドウェブ上のユーザー/ハッカー。利点は、ServletContext#getResource()
または#getRealPath()
を使用してプログラムから簡単にアクセスできることです。欠点は、webappを再デプロイするたびに失われることです。
デフォルトの一時フォルダに保存することもできます。利点は、File#createTempFile()
またはSystem.getProperty("Java.io.tmpdir")
などの標準APIからアクセスできることです。一時フォルダーには、OSで制御されるフォルダーのクリーンアップをJavaから制御できないという欠点があるため、リソースを閉じても後で必要になったときにデータが失われる危険性があります。
また、webapp以外の固定フォルダーに保存することもできます。これには、webappを再デプロイするたびに内容が失われないという利点があります。欠点は、十分なOS権限を持つフォルダーを自分で作成する必要があることです。これは、サードパーティのホストには適用できない場合があります。
自分の一時的なリソースをクリーニングすることは、確かに自分で行う必要があるタスクに属します。私はそれを懸念事項とは考えていません。
長所/短所を上回るだけです。
Java.io.File
を必要とする場合は、データベースからドキュメントを一時ファイルに保存し、処理を開始して、データベースに再度読み込みます。Webコンテナは、一時ディレクトリを指すコンテキスト属性を提供します。
サーブレット仕様SRV.3.7.1一時作業ディレクトリ
サーブレットコンテキストごとに一時ストレージディレクトリが必要です。サーブレットコンテナは、サーブレットコンテキストごとにプライベート一時ディレクトリを提供し、 ServletContext.TEMPDIR (javax.servlet.context.tempdir
)コンテキスト属性。属性に関連付けられたオブジェクトは、Java.io.Fileタイプである必要があります。
例:
File appTempDir = getServletContext().getAttribute(ServletContext.TEMPDIR);
File tempFile = File.createTempFile("process1", ".txt", appTempDir);
tempFile.deleteOnExit();
try {
...
} finally {
tempFile.delete();
}
一時ファイルは一時フォルダーにあると思います。あなたの場合、自分でファイルを削除しますが、ファイル削除操作にバグがある場合はどうなりますか?または、ファイルが削除される前にサーバーがシャットダウンした場合はどうなりますか?一時フォルダーに書き込む場合、少なくともファイルが後で(手動でまたは何らかのプロセスによって)クリーンアップされることが期待されます。
アプリケーションが永続的なデータ(つまり一時的ではない)を格納したい場合でも、Tomcatディレクトリに格納しないでください。これらのディレクトリは、アプリケーションの新しいバージョンをデプロイするたびに削除または上書きされる傾向があるためです(またはTomcatの新しいバージョンをインストールします)。
便利な方法:
Java.io.File
_ _.createTempFile
_System
.getProperty("Java.io.tmpdir")