如何从 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)