비동기 서블릿에서 동작 변경 확인

Servlet 3.0 스펙에서, 조회 문자열이 요청에 포함된 경우 디스패치된 자원에 이 문자열을 사용할 수 있게 됩니다. Servlet 3.1 스펙에서 조회 문자열이 디스패치 자원에 제공되는 경우 원본 요청의 조회 문자열 대신 디스패치된 자원에 이 조회 문자열을 사용할 수 있게 됩니다.

다음 예제는 동작에서의 이러한 차이를 보여줍니다.


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"

AsyncContext.dispatch() 또는 AsyncContext.complete() 메소드를 호출한 후 요청 또는 응답 오브젝트를 획득하는 것은 허용되지 않고, 결과적으로 다음 예외가 됩니다.

java.lang.IllegalStateException: SRVE9015E: Cannot obtain the request or response object after an AsyncContext.dispatch() or AsyncContext.complete().

이 규칙은 다음 항목에 플래그를 지정합니다.

Servlet 3.1 동작 변경에 대한 자세한 정보는 다음 자원을 참조하십시오. Servlet 3.1 동작 변경사항.