【问题标题】:GZip HttpResponse using XSL Transformer使用 XSL 转换器的 GZip HttpResponse
【发布时间】:2014-03-31 20:27:59
【问题描述】:

我的 Servlet 中有以下代码,但是当 IE 访问该页面时,它返回一个空白的 html 页面。如果我直接在 StreamResult 构造函数中使用 response.getOutputStream(),页面加载正常。我错过了什么?

response 是 HttpServletResponse 的一个实例,xsl 是 XSLTC TransformerFactory 的 Transformer 的一个实例

response.setHeader("Content-Encoding", "gzip");
GZIPOutputStream gzipOut = new GZIPOutputStream(response.getOutputStream());
Result outputResult = new StreamResult(gzipOut);

xsl.transform(xmlSource, outputResult);

【问题讨论】:

  • 如果您使用的是 Firefox 3.x,一切正常吗?如果不是,很可能您的代码可以使用下面 jsight 建议的修复。

标签: java xslt gzip servlets transformer


【解决方案1】:

我猜你没有关闭 gzipOut 流,因此它没有发送“页脚”信息。

【讨论】:

  • 会关闭底层响应,如:resp.getOutputStream().close();工作吗?
  • 我真的不知道。但是,另一种技术可能是调用 gzipOut.finish(),因为它能够在不关闭底层流的情况下打印最终的 CRC。我不确定 GzipOutputStream 是否/如何检测到您在底层流上调用 close,所以我怀疑这实际上会使情况变得更糟。
【解决方案2】:

原来在这个流上有一个 .finish() 是必需的。和flush类似,但是因为是不同的调用,所以Transformer不知道怎么用。

【讨论】:

    猜你喜欢
    • 2012-05-24
    • 2012-08-12
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    相关资源
    最近更新 更多