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 :
javax.servlet.annotation.WebServlet avec un attribut asyncSupported=trueweb.xml et web-fragment.xml avec un élément <async-supported>true</async-supported> dans l'élément <servlet>Pour plus d'informations sur les changements de comportement dans Servlet 3.1, voir la ressource suivante : Changements de comportement dans Servlet 3.1.