Проверить наличие изменений в алгоритме работы асинхронных сервлетов

В спецификации Servlet 3.0 отправляемому ресурсу доступна строка оператора запроса, включенная в запрос к серверу. В спецификации Servlet 3.1 отправленному ресурсу доступна строка запроса, которая есть у ресурса-отправителя, а не строка запроса из исходного запроса к серверу.

Приведенный ниже пример демонстрирует это отличие:


Request for /FirstResource?param=One

First Resource:

getParameter("param"); // возвращает "One"

Forward request to /SecondResource?param=Two

SecondResource:

getParameter("param"); // возвращает "Two"
AsyncContext ac = getAsyncContext();
ac.start();
ac.dispatch(); // отправляется в /FirstResource

First Resource:

Servlet-3.0 feature : getParameter("param") возвращает "One"
Servlet-3.1 feature : getParameter("param") возвращает "Two"

Получение объекта запроса или ответа после вызова метода AsyncContext.dispatch() или AsyncContext.complete() является недопустимым и приводит к возникновению следующей исключительной ситуации:

java.lang.IllegalStateException: SRVE9015E: Нельзя получать объект запроса или ответа после AsyncContext.dispatch() или AsyncContext.complete().

Это правило помечает следующие элементы:

Дополнительные сведения об изменении поведения Servlet 3.1 см. в ресурсе: Изменение поведения Servlet 3.1.