私のWebアプリケーションはXMLファイルを生成します。Struts2ストリームの結果を使用してダウンロードを管理しています。struts.xmlのアクションは次のとおりです。
<action name="generateXML" class="navigation.actions.GenerateXML">
<result type="stream">
<param name="contentType">text/xml</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">1024</param>
</result>
...
</action>
FileInputStream"inputStream"が作成されるアクションクラス"GenerateXML"の部分は次のとおりです。
public String execute() {
File xml = new File(filename);
...//fill the file with stuff
try {
setInputStream(new FileInputStream(xml));
} finally {
//inputStream.close();
xml.delete();
}
}
inputStreamがまだ閉じられていないため、ファイルの削除は機能しません(その部分はコメント化されています)。ただし、この時点で閉じると、strutsがダウンロードを生成する前にストリームが閉じられたため、ユーザーがダウンロードしたxmlファイルは空になります。サーバー上のこれらの一時ファイルを定期的に削除するスクリプトを使用する以外に、strutsが処理を実行した後に「inputStream」を閉じる方法はありますか?