Как указать параметр тайм-аута запроса Http в контейнере сервлета Java - PullRequest
23 голосов
/ 12 сентября 2009

Я пытаюсь понять, где я могу настроить время ожидания для всех запросов, поступающих на мой сервлет (или на все мои сервлеты)? Это, как я думаю, свойство контейнера? Кроме того, как это влияет на разные браузеры? Все ли они соответствуют параметру, который диктует контейнер? Или, может быть, время ожидания запроса даже не то, что я могу контролировать, и каждый браузер решает это самостоятельно? (Просто чтобы прояснить, я не говорю о тайм-ауте сессии)

Ответы [ 3 ]

14 голосов
/ 12 сентября 2009

Время ожидания от клиента (т. Е. Сколько времени он ожидает ответа на запрос HTTP) определяется на клиенте. Для IE см. this , а для Firefox см. this .

Вы не можете контролировать это время ожидания с сервера.

7 голосов
/ 12 сентября 2009

Даже если вы не можете контролировать время ожидания клиента, вы можете сделать сервер очень нетерпеливым :) Например, в Tomcat вы можете сделать это в своем коннекторе,

<Connector port="8080"  
  ...
  connectionTimeout ="5000"
  disableUploadTimeout="false" />

Это заставляет сервер ждать только 5 секунд и закрывать соединение. Браузер получит сообщение об ошибке закрытия соединения. Вы можете относиться к нему так же, как к таймауту в клиенте.

Конечно, это работает только в том случае, если время ожидания вызвано сервером, а не проблемами подключения между браузером и сервером.

2 голосов
/ 12 сентября 2009

Вы не можете контролировать время ожидания клиента с сервера. Однако вы можете отправлять данные клиенту время от времени, пока ваша длительная операция занята. Это предотвратит тайм-аут клиента и может использоваться для отображения прогресса пользователю и т. Д. Записать данные в OutputStream или Writer, полученные из ответа, и вызвать сброс для отправки частичных данных клиенту.

...