1.将包装后的response传递给下游组件后 chain.doFilter(request, wrapper);
2.在下游组件,HelloServlet中执行这段代码时,
PrintWriter pw = resp.getWriter(); pw.write("<h1>Hello, world!</h1>"); pw.flush();
实际是将数据写入到了包装类CachedHttpServletResponse中的ByteArrayOutputStream
public void write(int b) throws IOException { output.write(b); }
3.然后从包装类中取出数据,写入缓存,并刷新给客户端。
...... data = wrapper.getContent(); cache.put(url, data); ...... // 写入到原始的Response: ServletOutputStream output = resp.getOutputStream(); output.write(data); output.flush();
其实最重要的点就是这里。下游组件flush的时候并没有发送数据给客户端,而是走response的包装类,把数据存起来了。
Sign in to make a reply
Loading...
1.将包装后的response传递给下游组件后 chain.doFilter(request, wrapper);
2.在下游组件,HelloServlet中执行这段代码时,
实际是将数据写入到了包装类CachedHttpServletResponse中的ByteArrayOutputStream
3.然后从包装类中取出数据,写入缓存,并刷新给客户端。
其实最重要的点就是这里。下游组件flush的时候并没有发送数据给客户端,而是走response的包装类,把数据存起来了。