【问题标题】:HttpServletResponseWrapper to capture the response for static resource in java web?HttpServletResponseWrapper 捕获 Java Web 中静态资源的响应?
【发布时间】: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


【解决方案1】:

使用 HttpServletResponseWrapper 捕获静态资源是可以的。 问题是缓存。

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多