我有一个简单的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标头。
发送未知大小的大型回复的正确方法是什么?
答案 0 :(得分:0)
抱歉无法发表评论!
一个原因可能是读写连接超时。当读/写操作变得冗长时,Tomcat会关闭连接。 (ref)。 (seme issue)
您可以尝试将连接超时设置为-1(无超时)并重试,但如果您正在使用BIO(连接或后端操作),则这不好。