【发布时间】:2016-03-09 05:11:35
【问题描述】:
我已经搜索并看到了一些关于这个问题的答案,但仍然不知道这是怎么可能的......
我被要求实现一个过滤器,该过滤器在响应标头中返回 HTTP 请求的响应时间,例如。响应头:XX 以便被网络分析客户端库收集。
这是我的代码:
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResp = (HttpServletResponse)response;
long startTime = System.nanoTime();
chain.doFilter(request, response);
long endTime = System.nanoTime();
httpResp.addHeader("response-time",endTime-startTime);
}
我也尝试使用HttpServletResponseWrapper
我设法使用 OutputStream 修改了响应,但没有成功设置响应标头。
谢谢,杰
【问题讨论】:
-
你能展示你的新代码吗?如果响应尚未提交,您只能 setHeaders - 您是否收到响应已提交错误?
-
另外我应该提一下这种模型已经坏了。要设置标题,您需要在设置标题之前防止输出被写入。那么写入输出所花费的时间不属于记录的响应时间。
-
我已经按照这个例子How to use a filter to measure performance?,并设法改变了OutputStream,但我需要的是在chain.doFilter之后添加一个头响应..也许可以使用添加响应头输出流?
-
outputStream 封装了响应体,不能用于添加headers。如果您可以将信息添加到浏览器/客户端会忽略的响应正文的末尾,但您的客户端代码可以获取这可能会起作用。
-
你说的是不可能在chain.doFilter之后添加标题,因为响应已经发送给用户?
标签: java servlet-filters