【问题标题】:duplicate headers received from server using Struts2 [duplicate]使用 Struts2 从服务器接收到的重复标头 [重复]
【发布时间】:2015-01-08 09:05:30
【问题描述】:

我在一个应用程序中使用 Struts2。我需要下载 excel 文件(.xlsx 和 .xls 格式)。这在 IE 中正常工作,但在 Chrome 中显示错误

“从服务器收到重复的标头”

我在文件名前使用引号(“

struts.xml

<action name="*Excel" method="{1}" class="ReportUtilityAction">
    <result name="success" type="stream">
        <param name="contentType">application/vnd.ms-excel</param>
        <param name="inputName">fileInputStream</param>
        <param name="bufferSize">1024</param>
    </result>
</action>

我已经提到了动作类中的内容配置

static final private String Content = "Content-Disposition";

HttpServletResponse response = this.getHttpResponse();
response.setHeader(Content, "attachment;filename='Export.xlsx';");

【问题讨论】:

  • 如果您使用的是stream 结果,那么也可以使用它来设置内容处置标头。
  • @AleksandrM 我已经通过动作类使用了内容配置。这就是你要我尝试的吗?我无法得到你。能详细解释一下吗?
  • stream 结果已设置此标头,您正在添加另一个标头,因此出现此错误。阅读有关 stream 结果的文档。

标签: java http struts2 http-headers content-disposition


【解决方案1】:

您可以像设置其他标头一样设置contentDisposition:在struts 配置中。

<result name="success" type="stream">
    <param name="contentDisposition">attachment;filename="Export.xlsx";</param>
    <param name="contentType">application/vnd.ms-excel</param>
    <param name="inputName">fileInputStream</param>
    <param name="bufferSize">1024</param>
</result>

您还可以使用${} 表示法对其进行参数化,并在Action 中使用相应的getter:

<param name="contentDisposition">attachment;filename="${filename}";</param>
public String getFilename(){ ... }

【讨论】:

  • 我试过这个。我仍然在 chrome 中遇到同样的错误
  • 您显然需要从您的操作中删除 response.setHeader(Content, "attachment;filename='Export.xlsx';"); 部分
  • 确保您已正确重新部署并且没有缓存任何内容
  • 谢谢安德里亚。一旦我清除了缓存,它就会按预期工作。
  • 不客气 :) 请记得接受答案
【解决方案2】:

错误表示头域设置了两次;您应该能够在 HTTP 跟踪中看到这一点。因此你需要找出为什么它被设置了两次。

【讨论】:

    猜你喜欢
    • 2012-11-14
    • 2012-02-24
    • 2012-01-25
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    相关资源
    最近更新 更多