【问题标题】:View response headers before they are sent to the client?在将响应标头发送到客户端之前查看它们?
【发布时间】:2011-03-06 22:54:19
【问题描述】:

我正在为学校编写一个项目。我希望能够在网页上显示 Web 服务器发送给客户端的响应标头。我能够从 HttpServletRequest 读取请求标头,并且能够将响应标头写入 HttpServletResponse 没问题。

有没有办法做到这一点?可以复制服务器将要发送的内容吗?

我正在使用 Eclipse Helios 来开发这个带有 POJO 应用程序的 JSP,并且正在使用在 Debian Lenny 上运行的 Tomcat 5.5 来为它提供服务。

谢谢,

Ean

【问题讨论】:

  • 您能解释一下为什么在发送标头之前需要知道标头吗?
  • 好的,这听起来不错。一个(希望是次要的)问题仍然存在:doFilter 方法定义了一个 ServletResponse res 如下:code public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) /code ...在其中,我将 ServletResponse 转换为 HttpServletResponse这样我就可以访问 getHeader() 等方法:code HttpServletResponse response =(HttpServletResponse) res; /code ...但是,我仍然只能访问来自 ServletResponse 的方法,而不是来自 HttpServletResponse 的方法。关于为什么的任何想法?恩
  • 只需投射到HttpServletResponse

标签: java jsp debian tomcat5.5


【解决方案1】:

您可以使用FilterHttpServletResponseWrapper

用类似的东西覆盖三个addXHeader(..) 方法:

void addHeader(String name, String value) {
   super.addHeader(name, value);
   getWriter().write(name + " : " + value);
}

然后,在Filter

chain.doFilter(request, new HeaderHttpServletResponseWrapper(response));

但我会使用 Firebug 来检查标题。

see this question(第二个答案)

【讨论】:

  • @Bozho:addXHeaer 的三个方法在哪里?到目前为止,我只有一个带有 doFilter、init 和 destroy 的过滤器。谢谢!
  • 在您的 HttpServletResponseWrapper 实施中。
  • @Bozho:再看看这个,我不确定这就是我要问的。我想要做的是读取响应标头,而不是写入它们。因此,无论 addXHeader() 在哪里,我都不会使用它。关于 Firebug,通常这正是我会使用的,但这个练习的重点是在网页上显示该数据。再次感谢。
  • @ean - 你无法读取它们,你只能在它们被写入时拦截。
  • 只需将它们附加到某个列表,而不是您在 HttpServletResponseWrapper 实现中由公共 getter 公开,您可以稍后再回退 :)
【解决方案2】:

您可能想要编写一个 servlet 过滤器,它可以在请求和响应发送之前拦截它。

【讨论】:

  • 如果@ean 出于教育目的而仓促,他也可以使用简单的嗅探器作为 ngrep。
猜你喜欢
  • 2020-02-29
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多