如何从 Servlet 2.3 或 2.5 中的响应中获取标头

Posted

技术标签:

【中文标题】如何从 Servlet 2.3 或 2.5 中的响应中获取标头【英文标题】:How to get header from response in Servlet 2.3 or 2.5 【发布时间】:2012-09-25 12:48:15 【问题描述】:

我知道 v3.0 有方法 getHeader() 但是 2.3 呢?也许有可能从蒸汽中获得?

更新:

实际上,我需要 HTTP 响应标头 RESTful 应用程序。出于某种原因,我决定在 servlet 过滤器中执行此操作……但没有成功…… 解决方案@javax.ws.rs.core.Context HttpHeaders requestHeaders

例如,

@javax.ws.rs.GET
public String invoceRestMethod(@Context HttpHeaders requestHeaders)
      MultivaluedMap<String, String> map = headers.getRequestHeaders();
      for (Map.Entry<String, List<String>> entry : map.entrySet()) 
      //  processing header.... 
           

也许 in 会对某人有所帮助。但无论如何,对于 Servlet 问题仍然是打开的

【问题讨论】:

【参考方案1】:

您无法从流中获取标头*

您要做的是在调用 Servlet 之前将代理响应对象插入过滤器链中,并让它捕获标头。


* 实际上,您可以使用代理响应从流中捕获内容并解码标头。但是如果你是插入一个代理响应,直接捕获头部就更简单了。

【讨论】:

我猜你说的是 HttpServletResponseWrapper(HttpServletResponse) 。是的,我想。但是我怎么知道标题的长度呢? 你不需要知道。您将包装器子类化,覆盖 setHeader 方法以记录您感兴趣的标头。 嗨,斯蒂芬。我试图刺穿这一点。仅在我自己在 Servlet 中调用方法 setHeader 的情况下才有效。但我需要完整的 HTTP 标头。你有什么想法吗? 查看此页面上的示例 #3:di.unipi.it/~ghelli/didattica/bdldoc/A97329_03/web.902/a95878/…。以及链接到此答案的示例:***.com/a/7046900/139985 这应该在 2.5 中工作,前提是您将过滤器添加到过滤器链的足够远的位置。我不确定“我需要完整的 HTTP 标头”是什么意思。

以上是关于如何从 Servlet 2.3 或 2.5 中的响应中获取标头的主要内容,如果未能解决你的问题,请参考以下文章

Java Servlet 2.3/2.4/2.5/3.0/3.1/4.0 各web.xml文件

web.xml & web-fragment.xml (Servlet 2.3, 2.4, 2.5 + 3.0)模板

File Templates for web.xml & web-fragment.xml (Servlet 2.3, 2.4, 2.5 + 3.0)

如何在另一个 servlet 中使用其他 servlet 服务?

过滤器

浅谈servlet版本