【问题标题】:Read response before send it在发送之前阅读响应
【发布时间】:2012-01-25 16:22:42
【问题描述】:

我通过 servlet 向用户发送纯文本文件。

我正在使用 flatworm 框架来构建平面文件。我在浏览器中收到文件但为空。所以我想在发送之前开始调试分析输出流。

如何在将响应发送到 servlet 之前读取响应?我认为与询问如何将OutputStream 转换为InputStream 相同。

我已经看到了总是涉及 ByteArrayOutputStream 的解决方案,并且如您所知,当我调用 servlet response.getOutputStream() 时,它返回给我的是 OutputStream 而不是 ByteArrayOutputStream。

【问题讨论】:

  • 顺便说一句,这个问题可以被认为类似于“我如何在发送(通过邮件)之前阅读一封信?”。如果您是自己写的,请阅读它;如果您的秘书正在为您写,请向他/她索取一份副本(具体的最佳方式取决于秘书)。

标签: java servlets outputstream


【解决方案1】:

某处似乎有些混乱,但我不确定具体在哪里。

OutputStream 可以做什么?为什么,你可以给它写信,仅此而已。这意味着,如果您给定(或查找)输出流,则由您来提供数据 - 这意味着您已经拥有它。

另一方面,您可能不是直接在 OutputStream 上调用 write,而是将这个流传递到扁虫库(它会依次向它写入输出)。在这种情况下,你的调试“钩子”就在那里——扁虫会将文件写出到你发送的任何输出流中。因此,在这种情况下,您无需传入 servlet 的流,而是传入您自己创建的流。

这可能是ByteArrayOutputStream,(在扁虫方法返回后)您可以检查它以获取写入的字节。此时,您可以手动将它们写入响应的输出流。或者,您可能需要做一些稍微复杂的事情并创建自己的流包装器,该包装器直接写入底层响应流,但会在途中记录 - 并将其传递给扁虫。

但底线是,如果您正在与输出流交互,那么“您的”代码已经在本地某处拥有数据,只需捕获/访问该数据即可。

【讨论】:

  • 首先感谢您的回复。但是我如何检查 ByteArrayOutputStream ?我必须将 ByteArrayOutputStream 转换为 InputStream 吗?我该怎么做?提前致谢
  • 还有一件事,我不能使用 toByteArray 方法,因为我使用的是 JVM 1.2
  • 显然1.2中还有toByteArray方法(link)? AIUI ByteArrayOutputStream 的全部意义在于将输出放入您可以获得的数组中,所以我看不出如果没有该方法该类会做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 2019-05-19
  • 2015-10-06
  • 2014-11-30
  • 2017-12-14
  • 2020-05-28
相关资源
最近更新 更多