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
    Modifier and Type | Method and Description
    --- | ---
    `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`