【问题标题】:Need to Set HTTP Headers Conditionally on Servlet Response需要在 Servlet 响应上有条件地设置 HTTP 头
【发布时间】:2011-05-21 21:41:01
【问题描述】:

我想根据响应类型设置 HTTP 标头。我的问题是一些响应在我设置我的标题之前提交了他们的标题。有关如何处理此问题的任何建议?

【问题讨论】:

标签: java servlets jakarta-ee servlet-filters


【解决方案1】:

一个想法是在调用servlet之前在过滤器中的响应对象中设置响应标头。

另一种方法是为 servlet 提供一个响应包装器,以防止真正的响应被实际提交。这可能需要在内存中缓冲响应正文。

但我认为最好的方法是修改 servlet,以便它们设置所需的标头。


我是否必须通过向包装器提供自己的输出流来缓冲整个响应?我可以覆盖 flush() 或类似的东西吗?

如何实现它取决于您。约束是响应包装对象必须以某种方式安排在响应正文的写入开始之前添加特殊标头。概念上简单的方法是缓冲响应正文,但您也可以让响应包装器提供输出流/写入器,在第一次刷新之前将标头添加到实际响应输出流/写入器。

我担心缓冲会导致性能问题

是的,它可以做到,尽管您需要查看整个 webapp 以确定这是否重要。

从性能的角度来看,最好的解决方案是让 servlet 自己设置标头。

【讨论】:

  • 你的第二种方法是我需要采取的。我只想根据某些条件更改/添加标题,在 servlet 完成之前我不知道哪个。而且它不在一个地方,所以 3 也出来了。我是否必须通过向包装器提供自己的输出流来缓冲整个响应?我可以覆盖 flush() 或类似的东西吗?我担心缓冲会导致性能问题
猜你喜欢
  • 2011-06-11
  • 2014-03-21
  • 2011-03-25
  • 2014-02-11
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
相关资源
最近更新 更多