檢查非同步 Servlet 的行為變更

在 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 行為變更