我的网页应用程序生成一个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>
这是"GenerateXML"操作类的一部分,其中创建了FileInputStream "inputStream":
public String execute() {
File xml = new File(filename);
...//fill the file with stuff
try {
setInputStream(new FileInputStream(xml));
} finally {
//inputStream.close();
xml.delete();
}
}
删除文件不起作用,因为inputStream尚未关闭(该部分已被注释掉)。但是,如果此时关闭它,则用户下载的xml文件为空,因为在struts生成下载之前已经关闭了其流。 除了使用定期删除服务器上的临时文件的脚本外,是否有一种方法可以在struts完成其操作后关闭“inputStream”?
invoke()
之后的拦截器中进行文件清理。这可能更加可定制,尽管在这种情况下可能并不重要。 - Dave Newton