Java 使用struts时在jsp中写入ServletOutputStream

Java 使用struts时在jsp中写入ServletOutputStream,java,jsp,servlets,struts2,Java,Jsp,Servlets,Struts2,我正在使用struts2 web应用程序。我面临的情况是,当用户单击链接时,我希望在用户浏览器中显示一个文件(可能是excel、pdf文件或html) 并且响应必须以浏览器中打开/保存对话框的形式出现 因为到目前为止我所做的是 1) 在struts.xml文件中创建操作映射 2) Action类方法的内容如下 ServletOutputStream outputStream = null; outputStream = response.getOutputStream();

我正在使用struts2 web应用程序。我面临的情况是,当用户单击链接时,我希望在用户浏览器中显示一个文件(可能是excel、pdf文件或html)

并且响应必须以浏览器中打开/保存对话框的形式出现

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

1) 在struts.xml文件中创建操作映射

2) Action类方法的内容如下

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页面中编写什么来显示这些内容


任何人都请帮忙。

没什么,您还需要将响应头
上下文处理设置为“附件”

将其添加到servlet代码中

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

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

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

但是在这种情况下,您可能只想从您的操作返回
ActionSupport.NONE
null
,因为您自己正在设置标题并编写输出,请参阅

如果你打电话

response.setHeader("Content-Disposition","attachment; filename=\"rfc2616-quoted-string\"");`
response.setHeader("Content-Disposition","inline");`
用户将看到一个下载对话框,但是如果您调用

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

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

我建议使用

这是一个


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

好的..我要问的是我需要在jsp页面中写些什么来显示内容..just out.println()。对吗?或显示该内容所需的其他内容..这就是我的要求。您不希望用户有下载文件的选项,只需显示它,对吗?当用户单击此特定链接时,只需显示“保存/打开”对话框..是的,此代码将显示“打开/保存”对话框。你试过了吗?好的..有没有办法在struts.xml的result标记中把contentType,inputName,contentDisposition作为action类的结果?我不知道你的意思?您的意思是希望通过action类中的代码而不是struts.xml文件中的代码来设置这些参数吗?您正在使用注释吗?