【发布时间】:2018-04-09 03:14:22
【问题描述】:
我想测量javaweb servlet过滤器中响应的“内容长度”。
所以我创建了一个类,它扩展了 HttpServletResponseWrapper 和 覆盖 方法 "getOutputStream" 和 "getWriter" .
除了静态资源的响应,比如请求.jpg文件,效果都很好。
我使用Tomcat 8.5进行研究,代码如下:
public class TestFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
TestResponse tRes = new TestResponse((HttpServletResponse) res) ;
System.out.println(request.getMethod() +" "+ request.getRequestURI());
chain.doFilter(req, tRes);
}
@Override
public void init(FilterConfig config) throws ServletException {
}
}
public class TestResponse extends HttpServletResponseWrapper {
public TestResponse(HttpServletResponse response) {
super(response);
}
@Override
public ServletOutputStream getOutputStream() throws IOException {
System.out.println("in getOutputStream...");
return super.getOutputStream();
}
@Override
public PrintWriter getWriter() throws IOException {
System.out.println("in getWriter...");
return super.getWriter();
}
@Override
public void setStatus(int sc) {
System.out.println("in setStatus...");
super.setStatus(sc);
}
@Override
public void setHeader(String name, String value) {
System.out.println("in setHeader...");
super.setHeader(name, value);
}
@Override
public void setContentType(String type) {
System.out.println("in setContentType...");
super.setContentType(type);
}
}
这是测试结果:
GET /testWeb/
in setContentType...
in getWriter...
GET /testWeb/spider.jpg
in setStatus...
in setHeader...
所以我想知道是否可以使用 HttpServletResponseWrapper 来捕获 静态资源的响应?
如果可能,那怎么做?
【问题讨论】:
-
适用于静态资源的tomcat servlet“DefaultServlet”的代码表明它将使用“getOutputStream”来输出资源。所以很奇怪
标签: java jakarta-ee