送分喽,讨论一下HttpServletResponseWrapper的原理(拒绝纯粹要分者)
chain.doFilter(request, wrapper);//wrapper是下面CharResponseWrapper实例
当Filter执行上面这句时,响应会写入wrapper中去,那么响应会写到wrapper中的output对象里?
以下是我的理解,请指教,下面那个小例子,覆盖了一些response的方法,这里的getWriter()覆盖了ServletResponse的getWriter()方法后,chain就会使得容器的响应内容写到output对象里。
因为ServletResponse接口中的getWriter()是与容器通信,它返回的PrintWriter其实是容器提供的,而wrapper替代了真正的response,它的getWriter()返回的对象本来是空的,只不过因为调用到getWriter()时,容器自然会把要输出的内容写入getWriter()的返回值里去。
请问这样理解,对吗???????????
如果谁有详细讲解“包装器”的资料,能不能发一份给我?
public class CharResponseWrapper extends
HttpServletResponseWrapper {
private CharArrayWriter output;
public String toString() {
return output.toString();
}
public CharResponseWrapper(HttpServletResponse response){
super(response);
output = new CharArrayWriter();
}
public PrintWriter getWriter(){
return new PrintWriter(output);
}
}