将大内容写入servlet响应失败

时间:2018-05-22 10:48:45

标签: tomcat servlets tomcat8

我有一个简单的servlet(在Tomcat8中运行),可以缩写如下:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("text/plain");
    OutputStream out = resp.getOutputStream();
    byte[] b = "some very large content\n".getBytes()
    for (int i=0; i<1000; i++) {
        out.write(b);
    }
}

我正在使用Apache HTTPClient来使用它,基本上就像这样:

CloseableHttpResponse response = ...;
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();

对于小型数据,它工作正常,但如果数据超出一定大小,则客户端不会消耗响应。好像什么都没发送?

需要注意的是,我事先并不知道数据的大小,因此无法指定Content-Length标头。

发送未知大小的大型回复的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

抱歉无法发表评论!

一个原因可能是读写连接超时。当读/写操作变得冗长时,Tomcat会关闭连接。 (ref)。 (seme issue

您可以尝试将连接超时设置为-1(无超时)并重试,但如果您正在使用BIO(连接或后端操作),则这不好。