public class StandardServletAsyncWebRequest extends ServletWebRequest implements AsyncWebRequest, AsyncListener
AsyncWebRequest
.
The servlet and all filters involved in an async request must have async
support enabled using the Servlet API or by adding an
<async-supported>true</async-supported>
element to servlet and filter
declarations in web.xml
.
DESTRUCTION_CALLBACK_NAME_PREFIX, immutableValueTypes
requestDestructionCallbacks
REFERENCE_REQUEST, REFERENCE_SESSION, SCOPE_REQUEST, SCOPE_SESSION
Constructor and Description |
---|
StandardServletAsyncWebRequest(HttpServletRequest request,
HttpServletResponse response)
Create a new instance for the given request/response pair.
|
Modifier and Type | Method and Description |
---|---|
void |
addCompletionHandler(Runnable runnable)
Add a handler to invoke when request processing completes.
|
void |
addErrorHandler(Consumer<Throwable> exceptionHandler)
Add a handler to invoke when an error occurred while concurrent
handling of a request.
|
void |
addTimeoutHandler(Runnable timeoutHandler)
Add a handler to invoke when concurrent handling has timed out.
|
void |
dispatch()
Dispatch the request to the container in order to resume processing after
concurrent execution in an application thread.
|
boolean |
isAsyncComplete()
Whether async request processing has completed.
|
boolean |
isAsyncStarted()
Whether the request is in async mode following a call to
AsyncWebRequest.startAsync() . |
void |
onComplete(AsyncEvent event)
Notifies this AsyncListener that an asynchronous operation
has been completed.
|
void |
onError(AsyncEvent event)
Notifies this AsyncListener that an asynchronous operation
has failed to complete.
|
void |
onStartAsync(AsyncEvent event)
Notifies this AsyncListener that a new asynchronous cycle is being
initiated via a call to one of the
ServletRequest.startAsync()
methods. |
void |
onTimeout(AsyncEvent event)
Notifies this AsyncListener that an asynchronous operation
has timed out.
|
void |
setTimeout(Long timeout)
In Servlet 3 async processing, the timeout period begins after the
container processing thread has exited.
|
void |
startAsync()
Mark the start of asynchronous request processing so that when the main
processing thread exits, the response remains open for further processing
in another thread.
|
checkNotModified, checkNotModified, checkNotModified, getContextPath, getDescription, getHeader, getHeaderNames, getHeaderValues, getHttpMethod, getLocale, getNativeRequest, getNativeRequest, getNativeResponse, getNativeResponse, getParameter, getParameterMap, getParameterNames, getParameterValues, getRemoteUser, getUserPrincipal, isNotModified, isSecure, isUserInRole, toString
getAttribute, getAttributeNames, getRequest, getResponse, getSession, getSessionId, getSessionMutex, isImmutableSessionAttribute, registerDestructionCallback, registerSessionDestructionCallback, removeAttribute, resolveReference, setAttribute, updateAccessedSessionAttributes
isRequestActive, registerRequestDestructionCallback, removeRequestDestructionCallback, requestCompleted
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getNativeRequest, getNativeRequest, getNativeResponse, getNativeResponse
checkNotModified, checkNotModified, checkNotModified, getContextPath, getDescription, getHeader, getHeaderNames, getHeaderValues, getLocale, getParameter, getParameterMap, getParameterNames, getParameterValues, getRemoteUser, getUserPrincipal, isSecure, isUserInRole
getAttribute, getAttributeNames, getSessionId, getSessionMutex, registerDestructionCallback, removeAttribute, resolveReference, setAttribute
public StandardServletAsyncWebRequest(HttpServletRequest request, HttpServletResponse response)
request
- current HTTP requestresponse
- current HTTP responsepublic void setTimeout(Long timeout)
setTimeout
in interface AsyncWebRequest
timeout
- amount of time in milliseconds; null
means no
timeout, i.e. rely on the default timeout of the container.public void addTimeoutHandler(Runnable timeoutHandler)
AsyncWebRequest
addTimeoutHandler
in interface AsyncWebRequest
public void addErrorHandler(Consumer<Throwable> exceptionHandler)
AsyncWebRequest
addErrorHandler
in interface AsyncWebRequest
public void addCompletionHandler(Runnable runnable)
AsyncWebRequest
addCompletionHandler
in interface AsyncWebRequest
public boolean isAsyncStarted()
AsyncWebRequest
AsyncWebRequest.startAsync()
.
Returns "false" if asynchronous processing never started, has completed,
or the request was dispatched for further processing.isAsyncStarted
in interface AsyncWebRequest
public boolean isAsyncComplete()
It is important to avoid use of request and response objects after async processing has completed. Servlet containers often re-use them.
isAsyncComplete
in interface AsyncWebRequest
public void startAsync()
AsyncWebRequest
startAsync
in interface AsyncWebRequest
public void dispatch()
AsyncWebRequest
dispatch
in interface AsyncWebRequest
public void onStartAsync(AsyncEvent event) throws IOException
javax.servlet.AsyncListener
ServletRequest.startAsync()
methods.
The AsyncContext
corresponding to the asynchronous
operation that is being reinitialized may be obtained by calling
getAsyncContext
on the given
event.
In addition, if this AsyncListener had been registered via a call
to AsyncContext.addListener(AsyncListener,
ServletRequest, ServletResponse)
, the supplied ServletRequest and
ServletResponse objects may be retrieved by calling
getSuppliedRequest
and
getSuppliedResponse
,
respectively, on the given event.
This AsyncListener will not receive any events related to the
new asynchronous cycle unless it registers itself (via a call
to AsyncContext.addListener(javax.servlet.AsyncListener)
) with the AsyncContext that
is delivered as part of the given AsyncEvent.
onStartAsync
in interface AsyncListener
event
- the AsyncEvent indicating that a new asynchronous
cycle is being initiatedIOException
- if an I/O related error has occurred during the
processing of the given AsyncEventpublic void onError(AsyncEvent event) throws IOException
javax.servlet.AsyncListener
The AsyncContext
corresponding to the asynchronous
operation that failed to complete may be obtained by calling
getAsyncContext
on the given
event.
In addition, if this AsyncListener had been registered via a call
to AsyncContext.addListener(AsyncListener,
ServletRequest, ServletResponse)
, the supplied ServletRequest and
ServletResponse objects may be retrieved by calling
getSuppliedRequest
and
getSuppliedResponse
,
respectively, on the given event.
onError
in interface AsyncListener
event
- the AsyncEvent indicating that an asynchronous
operation has failed to completeIOException
- if an I/O related error has occurred during the
processing of the given AsyncEventpublic void onTimeout(AsyncEvent event) throws IOException
javax.servlet.AsyncListener
The AsyncContext
corresponding to the asynchronous
operation that has timed out may be obtained by calling
getAsyncContext
on the given
event.
In addition, if this AsyncListener had been registered via a call
to AsyncContext.addListener(AsyncListener,
ServletRequest, ServletResponse)
, the supplied ServletRequest and
ServletResponse objects may be retrieved by calling
getSuppliedRequest
and
getSuppliedResponse
,
respectively, on the given event.
onTimeout
in interface AsyncListener
event
- the AsyncEvent indicating that an asynchronous
operation has timed outIOException
- if an I/O related error has occurred during the
processing of the given AsyncEventpublic void onComplete(AsyncEvent event) throws IOException
javax.servlet.AsyncListener
The AsyncContext
corresponding to the asynchronous
operation that has been completed may be obtained by calling
getAsyncContext
on the given
event.
In addition, if this AsyncListener had been registered via a call
to AsyncContext.addListener(AsyncListener,
ServletRequest, ServletResponse)
, the supplied ServletRequest and
ServletResponse objects may be retrieved by calling
getSuppliedRequest
and
getSuppliedResponse
,
respectively, on the given event.
onComplete
in interface AsyncListener
event
- the AsyncEvent indicating that an asynchronous
operation has been completedIOException
- if an I/O related error has occurred during the
processing of the given AsyncEvent