Na especificação Servlet 3.0, se uma sequência de consultas for incluída com uma solicitação, essa sequência será disponibilizada para o recurso despachado. Na especificação Servlet 3.1, se uma sequência de consultas for fornecida para o recurso de despacho, essa sequência de consultas será disponibilizada para o recurso despachado, em vez da sequência de consultas da solicitação original.
O exemplo a seguir demonstra essa diferença de comportamento:
|
Request for /FirstResource?param=One First Resource: getParameter("param"); // returns "One" Forward request to /SecondResource?param=Two SecondResource: getParameter("param"); // returns "Two" AsyncContext ac = getAsyncContext (); ac.start (); ac.dispatch(); // dispatches to /FirstResource First Resource: Servlet-3.0 feature : getParameter("param") returns "One" Servlet-3.1 feature : getParameter("param") returns "Two" |
A obtenção do objeto de solicitação ou resposta após a chamada dos métodos
AsyncContext.dispatch() ou AsyncContext.complete() não é permitida e resulta na exceção a seguir:
java.lang.IllegalStateException: SRVE9015E:
Cannot obtain the request or response object after an AsyncContext.dispatch() or AsyncContext.complete().
Essa regra sinaliza os itens a seguir:
javax.servlet.annotation.WebServlet com um atributo asyncSupported=trueweb.xml e web-fragment.xml com um elemento
<async-supported>true</async-supported> no
elemento <servlet>Para mais informações sobre mudanças de comportamento do Servlet 3.1, veja o recurso a seguir: Mudanças de comportamento do Servlet 3.1.