org.springframework.web.context.request.async

## Class StandardServletAsyncWebRequest

- java.lang.Object
- - org.springframework.web.context.request.AbstractRequestAttributes
  - - org.springframework.web.context.request.ServletRequestAttributes
    - - org.springframework.web.context.request.ServletWebRequest
      - - org.springframework.web.context.request.async.StandardServletAsyncWebRequest

All Implemented Interfaces:
  EventListener, AsyncListener, AsyncWebRequest, NativeWebRequest, RequestAttributes, WebRequest

    public class StandardServletAsyncWebRequest
    extends ServletWebRequest
    implements AsyncWebRequest, AsyncListener

A Servlet 3.0 implementation of `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-support>true</async-support>` element to servlet and filter declarations in web.xml

Since:
  3.2
Author:
  Rossen Stoyanchev

### Field Summary

### Fields inherited from class org.springframework.web.context.request.ServletRequestAttributes

`DESTRUCTION_CALLBACK_NAME_PREFIX`

### Fields inherited from class org.springframework.web.context.request.AbstractRequestAttributes

`requestDestructionCallbacks`

### Fields inherited from interface org.springframework.web.context.request.RequestAttributes

`REFERENCE_REQUEST, REFERENCE_SESSION, SCOPE_GLOBAL_SESSION, SCOPE_REQUEST, SCOPE_SESSION`

### Constructor Summary

Constructors
Constructor and Description
`StandardServletAsyncWebRequest(HttpServletRequest request, HttpServletResponse response)` Create a new instance for the given request/response pair.

### Method Summary

Methods
`void` `addCompletionHandler(Runnable runnable)` Add a handle to invoke when request processing completes.
`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)`
`void` `onError(AsyncEvent event)`
`void` `onStartAsync(AsyncEvent event)`
`void` `onTimeout(AsyncEvent event)`
`void` `setTimeout(Long timeout)` Set the time required for concurrent handling to complete.
`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.

### Methods inherited from class org.springframework.web.context.request.ServletWebRequest

`checkNotModified, checkNotModified, getContextPath, getDescription, getHeader, getHeaderNames, getHeaderValues, getLocale, getNativeRequest, getNativeRequest, getNativeResponse, getNativeResponse, getParameter, getParameterMap, getParameterNames, getParameterValues, getRemoteUser, getResponse, getUserPrincipal, isNotModified, isSecure, isUserInRole, toString`

### Methods inherited from class org.springframework.web.context.request.ServletRequestAttributes

`getAttribute, getAttributeNames, getRequest, getSession, getSessionId, getSessionMutex, registerDestructionCallback, registerSessionDestructionCallback, removeAttribute, resolveReference, setAttribute, updateAccessedSessionAttributes`

### Methods inherited from class org.springframework.web.context.request.AbstractRequestAttributes

`isRequestActive, registerRequestDestructionCallback, removeRequestDestructionCallback, requestCompleted`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface org.springframework.web.context.request.NativeWebRequest

`getNativeRequest, getNativeRequest, getNativeResponse, getNativeResponse`

### Methods inherited from interface org.springframework.web.context.request.WebRequest

`checkNotModified, checkNotModified, getContextPath, getDescription, getHeader, getHeaderNames, getHeaderValues, getLocale, getParameter, getParameterMap, getParameterNames, getParameterValues, getRemoteUser, getUserPrincipal, isSecure, isUserInRole`

### Methods inherited from interface org.springframework.web.context.request.RequestAttributes

`getAttribute, getAttributeNames, getSessionId, getSessionMutex, registerDestructionCallback, removeAttribute, resolveReference, setAttribute`

### Constructor Detail

#### StandardServletAsyncWebRequest

    public StandardServletAsyncWebRequest(HttpServletRequest request,
                                  HttpServletResponse response)

Create a new instance for the given request/response pair.

Parameters:
  `request` - current HTTP request
  `response` - current HTTP response

### Method Detail

#### setTimeout

    public void setTimeout(Long timeout)

Set the time required for concurrent handling to complete. This property should not be set when concurrent handling is in progress, i.e. when `AsyncWebRequest.isAsyncStarted()` is `true`.

In Servlet 3 async processing, the timeout period begins after the container processing thread has exited.

Specified by:
  `setTimeout` in interface `AsyncWebRequest`
Parameters:
  `timeout` - amount of time in milliseconds; `null` means no timeout, i.e. rely on the default timeout of the container.

#### addTimeoutHandler

    public void addTimeoutHandler(Runnable timeoutHandler)

Description copied from interface: `AsyncWebRequest`
Add a handler to invoke when concurrent handling has timed out.

Specified by:
  `addTimeoutHandler` in interface `AsyncWebRequest`

#### addCompletionHandler

    public void addCompletionHandler(Runnable runnable)

Description copied from interface: `AsyncWebRequest`
Add a handle to invoke when request processing completes.

Specified by:
  `addCompletionHandler` in interface `AsyncWebRequest`

#### isAsyncStarted

    public boolean isAsyncStarted()

Description copied from interface: `AsyncWebRequest`
Whether the request is in async mode following a call to `AsyncWebRequest.startAsync()`. Returns "false" if asynchronous processing never started, has completed, or the request was dispatched for further processing.

Specified by:
  `isAsyncStarted` in interface `AsyncWebRequest`

#### isAsyncComplete

    public boolean isAsyncComplete()

Whether async request processing has completed.

It is important to avoid use of request and response objects after async processing has completed. Servlet containers often re-use them.

Specified by:
  `isAsyncComplete` in interface `AsyncWebRequest`

#### startAsync

    public void startAsync()

Description copied from interface: `AsyncWebRequest`
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.

Specified by:
  `startAsync` in interface `AsyncWebRequest`

#### dispatch

    public void dispatch()

Description copied from interface: `AsyncWebRequest`
Dispatch the request to the container in order to resume processing after concurrent execution in an application thread.

Specified by:
  `dispatch` in interface `AsyncWebRequest`

#### onStartAsync

    public void onStartAsync(AsyncEvent event)
                      throws IOException

Specified by:
  `onStartAsync` in interface `AsyncListener`
Throws:
  `IOException`

#### onError

    public void onError(AsyncEvent event)
                 throws IOException

Specified by:
  `onError` in interface `AsyncListener`
Throws:
  `IOException`

#### onTimeout

    public void onTimeout(AsyncEvent event)
                   throws IOException

Specified by:
  `onTimeout` in interface `AsyncListener`
Throws:
  `IOException`

#### onComplete

    public void onComplete(AsyncEvent event)
                    throws IOException

Specified by:
  `onComplete` in interface `AsyncListener`
Throws:
  `IOException`