Повторное использование HttpServletRequest

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

Вопрос:

Может ли кто-то указать спецификацию сервлета, где это поведение (или правила действительности для ссылок на такие экземпляры) определено?

Ответ 1

Он не определен в API Servlet. Это деталь реализации.

В 3.11 для объектов запроса (и 5.6 для объектов ответа)

Каждый объект запроса действителен только в пределах области сервлетов метод обслуживания или в рамках метода filter doFilter, если асинхронная обработка не включена для компонента и на объект запроса вызывается метод startAsync. В случае где происходит асинхронная обработка, объект запроса остается действительным до тех пор, пока в AsyncContext не будет вызван полный вызов. Контейнеры обычно объекты запроса на рециркуляцию, чтобы избежать накладных расходов на производительность создание объекта запроса. Разработчик должен знать, что поддержка ссылки на объекты запроса, для которых startAsync не был вызван вне области, описанной выше, не рекомендуется, поскольку она может иметь неопределенные результаты

Это не требуется, но обычно используется.

То, что находится в спецификации (см. главу 2.3.3), является однопоточной моделью. Один запрос, один поток. Это позволяет очищать и повторно использовать запрос.