Rechercher un changement de comportement sur des servlets asynchrones

Dans la spécification Servlet 3.0, si une chaîne de requête est incluse avec une demande, cette chaîne est mise à disposition dans la ressource distribuée. Dans la spécification Servlet 3.1, si une chaîne de requête est indiquée pour la ressources distribuée, cette chaîne de requête est mise à disposition pour la ressource distribuée au lieu de la chaîne de requête de la demande initiale.

L'exemple ci-dessous montre cette différence de comportement :


Demande de /FirstResource?param=One

FirstResource :

getParameter("param"); // renvoie "One"

Demande de transfert vers /SecondResource?param=Two

SecondResource:

getParameter("param"); // renvoie "Two"
AsyncContext ac = getAsyncContext();
ac.start();
ac.dispatch(); // distribue vers /FirstResource

FirstResource :

Servlet-3.0 feature : getParameter("param") returns "One"
Servlet-3.1 feature : getParameter("param") returns "Two"

L'obtention de la demande ou de l'objet de réponse après l'appel de la méthode AsyncContext.dispatch() ou AsyncContext.complete() n'est pas autorisée et entraîne l'exception suivante :

java.lang.IllegalStateException : SRVE9015E : Impossible d'obtenir la demande ou l'objet de réponse après AsyncContext.dispatch() ou AsyncContext.complete().

Cette règle marque les éléments suivants :

Pour plus d'informations sur les changements de comportement dans Servlet 3.1, voir la ressource suivante : Changements de comportement dans Servlet 3.1.