Не удается записать большой контент в ответ сервлета - PullRequest
0 голосов
/ 22 мая 2018

У меня есть простой сервлет (запущенный в 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 голосов
/ 31 мая 2018

Извините, не могу комментировать!

Одной из причин может быть тайм-аут соединения для чтения-записи.Tomcat закрывает соединение, когда операция чтения / записи становится длительной.( ссылка ).( seme issue )

Вы можете попробовать установить тайм-аут соединения на -1 (без тайм-аута) и повторить попытку, но это не очень хорошо, если вы работаете с BIO (соединение или серверная часть)опс).

...