Verificar uma mudança de comportamento em servlets assíncronos

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:

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.