W specyfikacji Servlet 3.0, jeśli łańcuch zapytania jest dołączony do żądania, ten łańcuch jest dostępny dla rozesłanego zasobu. W specyfikacji Servlet 3.1, jeśli dla rozesłanego zasobu zostaje udostępniony łańcuch zapytania, staje się on dla niego dostępny zamiast łańcucha zapytania z oryginalnego żądania.
Poniższy przykład ilustruje tę różnicę w zachowaniu:
|
Request for /FirstResource?param=One FirstResource: getParameter("param"); // zwraca wartość "One" Forward request to /SecondResource?param=Two SecondResource: getParameter("param"); // zwraca wartość "Two" AsyncContext ac = getAsyncContext(); ac.start(); ac.dispatch(); // rozsyła do /FirstResource FirstResource: Servlet-3.0 feature : getParameter("param") zwraca wartość "One" Servlet-3.1 feature : getParameter("param") zwraca wartość "Two" |
Uzyskiwanie obiektu żądania lub odpowiedzi po wywołaniu metody
AsyncContext.dispatch() lub AsyncContext.complete()
nie jest dozwolone i powoduje następujący wyjątek:
java.lang.IllegalStateException: SRVE9015E:
Nie można uzyskać obiektu żądania lub odpowiedzi po wykonaniu metody
AsyncContext.dispatch() lub AsyncContext.complete().
Ta reguła oznacza następujące elementy:
javax.servlet.annotation.WebServlet z atrybutem
asyncSupported=trueweb.xml i web-fragment.xml z elementem
<async-supported>true</async-supported>
w elemencie <servlet>Więcej informacji na temat zmian zachowania specyfikacji Servlet 3.1 zawiera następujący zasób: Zmiany zachowania specyfikacji Servlet 3.1.