Java HttpServletResponse.resetBuffer()不';行不通

Java HttpServletResponse.resetBuffer()不';行不通,java,google-app-engine,servlets,Java,Google App Engine,Servlets,在Google的Appengine with Java中,servlet: @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Writer w=resp.getWriter(); w.write("a"); resp.resetBuffer(); w=resp.getWrite

在Google的Appengine with Java中,servlet:

@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Writer w=resp.getWriter();
    w.write("a");
    resp.resetBuffer();
    w=resp.getWriter();
    w.write("b");
}
在开发服务器的响应中给出“ab”。在阅读Servlet规范2.5时,我的期望值仅为“b”

怎么了

我正在阅读网站上的文档

我尝试了resp.setBufferSize(8192)和getBufferSize(),但只得到了1


appengine版本:1.9.34,java版本:openjdk版本“1.8.0_66-internal”,ubuntu 14.10

“当响应未激活时,
reset
方法清除缓冲区中的数据 提交之前servlet设置的头和状态代码 重置调用也必须清除。
resetBuffer
方法清除 如果响应未提交,则缓冲区中的内容 清除标题和状态代码

如果响应已提交且
reset
resetBuffer
方法无效 调用时,必须抛出
非法状态异常
关联的缓冲区将保持不变。“

从表面上看,这意味着
resetBuffer
应该清除
“a”
,或者抛出异常

我想,您可以提出这样的论点:字符缓冲在
Writer
中,而不是响应缓冲区,但是Servlet规范没有做出任何这样的区分。此外,对规范的这种解释将使
resetBuffer
实际上毫无用处


如果谷歌AppEngine真的像你说的那样运行,我会称之为bug。

AppEngine中如此基本的东西中的bug?很难相信,肯定还有其他原因。也许GAE当时并不是真的这样。我在谷歌上发现了几个漏洞:谢谢,谷歌!