使用struts时,ServletOutputStream在jsp中写入

时间:2012-10-15 13:30:23

标签: java jsp servlets struts2

我正在使用struts2 Web应用程序。面对我想在用户点击链接时在用户浏览器中显示文件(可能是excel,pdf文件或html)的情况。

响应必须是浏览器中打开/保存对话框的形式。

为此我到目前为止所做的是

1)在struts.xml文件中创建一个动作映射。

2)动作类方法将具有类似

的内容
ServletOutputStream outputStream = null;
outputStream = response.getOutputStream();
                byte[] output = (byte[])content;
                response.setContentType(getContentType(format));
                response.setContentLength(output.length);
                outputStream.write(output, 0, output.length);
                outputStream.flush();
                outputStream.close();

此代码部分将设置内容类型,内容长度和atlast将写入内容。

我的问题是我需要在jsp页面中编写以显示此内容。

任何人都请帮忙。

4 个答案:

答案 0 :(得分:2)

您可以通过浏览器下载文件的操作显示JSP页面。你不能两者都做。可以这么说,它们是在同一个频道发送的。

有关如何实施下载文件的典型示例,请参阅StreamResult

但在这种情况下,您可能只想从操作中返回ActionSupport.NONEnull,因为您正在设置标题并自行编写输出,请参阅http://struts.apache.org/2.x/docs/result-configuration.html

如果你打电话

response.setHeader("Content-Disposition","attachment; filename=\"rfc2616-quoted-string\"");`

将向用户显示下载对话框,但如果您致电

response.setHeader("Content-Disposition","inline");`

如果可能,内容将显示在浏览器中。

答案 1 :(得分:1)

我建议使用StreamResult

这是example

此外,您可以在操作类中设置StreamResult参数而不是struts.xml文件。

答案 2 :(得分:0)

没有,您还需要将响应标头context-disposition设置为“附件”

答案 3 :(得分:0)

将此添加到您的servlet代码

 response.setHeader("Content-Disposition","attachment;filename=myfilename.pdf");