В спецификации 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().
Это правило помечает следующие элементы:
javax.servlet.annotation.WebServlet в атрибуте asyncSupported=trueweb.xml и web-fragment.xml с элементом
<async-supported>true</async-supported>
внутри элемента <servlet>Дополнительные сведения об изменении поведения Servlet 3.1 см. в ресурсе: Изменение поведения Servlet 3.1.