1

我正在使用 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

4 回答 4

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");`

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

于 2012-10-15T13:50:13.683 回答
1

我建议使用StreamResult

这是一个例子

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

于 2012-10-15T14:43:46.663 回答
0

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

于 2012-10-15T13:33:30.347 回答
0

将此添加到您的 servlet 代码中

 response.setHeader("Content-Disposition","attachment;filename=myfilename.pdf");
于 2012-10-15T13:35:55.963 回答