Sprawdź, czy nie zmieniło się zachowanie w serwletach asynchronicznych

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:

Więcej informacji na temat zmian zachowania specyfikacji Servlet 3.1 zawiera następujący zasób: Zmiany zachowania specyfikacji Servlet 3.1.