JSP Layout 页面修饰问题。BufferedResponse获取值问题。

th小米粥 发布于 2014/08/18 21:17
阅读 498
收藏 0

@红薯 你好,想跟你请教个问题:

http://www.oschina.net/question/12_4199

参考了您写的这个页面修饰的功能。

读了读代码,查询了相关的API。但是还有一个问题一直不明白。

第一段代码

/**
 * Response封装
 * @author Winter Lau
 *
 */
class BufferedResponse extends HttpServletResponseWrapper {
 
    StringWriter sout;
    PrintWriter pout;
     
    public BufferedResponse(HttpServletResponse res) {
        super(res);
        sout = new StringWriter();
        pout = new PrintWriter(sout);
    }
 
    @Override
    public PrintWriter getWriter() throws IOException {
        return pout;
    }
 
    protected String getScreenContent() {
        return sout.toString();
    }
}

第二段代码。

BufferedResponse my_res = new BufferedResponse(res);
        getServletContext().getRequestDispatcher(jsp_uri).include(req, my_res);
        String screenContent = my_res.getScreenContent();

主要是第一段不太理解。

HttpServletResponseWrapper这个实现了response的包装或装饰的模式。这儿理解。

ResponseWrapper构造的时候传到了response 然后接着实例化了二个对象。。

但是二个对象好像跟response没有任何关系吧?为什么调用getScreenContent这个方法的时候会有值?

然后检查这句代码。super(res);

然后我看了
HttpServletRequestWrapper
ServletRequestWrapper
这二个类的源代码。

HttpServletRequestWrapper 构造里边也是调用了super(res);

ServletRequestWrapper 构造实现如下:

public ServletRequestWrapper(ServletRequest request)
  {
    if (request == null) {
      throw new IllegalArgumentException("Request cannot be null");
    }
    this.request = request;
  }

这个问题一直没明白。想了好几天了。希望指点指点迷津。

加载中
0
红薯
红薯
这个值是由容器本身的 HttpServletResponseWrapper 执行生成的
0
th小米粥
th小米粥

引用来自“红薯”的评论

这个值是由容器本身的 HttpServletResponseWrapper 执行生成的

HttpServletResponseWrapper  这个类里边好像没有关于给值的代码。

我DEBUG发现调用这个方法getRequestDispatcher 的时候会调用重载方法getWriter()

执行的getRequestDispatcher这个方法的时候会把值给sout?

有没有资料我参考一下?我在网上找他的API好像没这方面的介绍。
谢谢。

返回顶部
顶部