【问题标题】:Writing large content to servlet response fails将大型内容写入 servlet 响应失败
【发布时间】:2018-05-22 10:48:45
【问题描述】:

我有一个简单的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 标头。

发送未知大小的大响应的正确方法是什么?

【问题讨论】:

    标签: tomcat servlets tomcat8


    【解决方案1】:

    抱歉无法评论!

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-10
      • 2014-12-07
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多