java – 关闭struts的stream结果使用的FileInputStream

我的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>

这是动作类“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”?

解决方法:

关闭输入流没有删除,但您可以自己编写.见is there an existing FileInputStream delete on close?.

这个想法是你不传递FileInputStream,而是传递你的ClosingFileInputStream,它会覆盖close并在调用close时删除文件. close()将由struts调用:

public String execute() {    
    File xml = new File(filename);
        ...//fill the file with stuff
        setInputStream(new ClosingFileInputStream(xml));   
    }

有关详细信息,请参阅链接的问题.

上一篇:java – 如何在Struts中显示成功消息?


下一篇:java – 启动GWT项目的PHP程序员的任何好技巧?