# Interface AsyncContext

public interface AsyncContext
Provides the context for asynchronous request handling

Since:
  Servlet 3.0

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `ASYNC_CONTEXT_PATH`
  The attribute name for the Context Path of the async request
  `static final String`
  `ASYNC_MAPPING`
  The attribute name for the Mapping of the async request
  `static final String`
  `ASYNC_PATH_INFO`
  The attribute name for the Path Info of the async request
  `static final String`
  `ASYNC_QUERY_STRING`
  The attribute name for the Query String of the async request
  `static final String`
  `ASYNC_REQUEST_URI`
  The attribute name for the URI of the async request
  `static final String`
  `ASYNC_SERVLET_PATH`
  The attribute name for the Servlet Path of the async request

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addListener(AsyncListener listener)`
  Adds an event listener that will be called for different AsyncEvents fire
  `void`
  `addListener(AsyncListener listener, ServletRequest request, ServletResponse response)`
  Adds an event listener that will be called when different AsyncEvents fire
  `void`
  `complete()`
  Completes the async request processing and closes the response stream
  `<T extends AsyncListener>
  T`
  `createListener(Class<T> clazz)`
  Creates and returns an AsyncListener object
  `void`
  `dispatch()`
  `void`
  `dispatch(String path)`
  `void`
  `dispatch(ServletContext context, String path)`
  `ServletRequest`
  `getRequest()`
  `ServletResponse`
  `getResponse()`
  `long`
  `getTimeout()`
  Get the current timeout.
  `boolean`
  `hasOriginalRequestAndResponse()`
  `void`
  `setTimeout(long timeout)`
  Set the timeout.
  `void`
  `start(Runnable run)`
  Starts a new thread to process the asynchronous request

- ## Field Details

  - ### ASYNC_REQUEST_URI

    static final String ASYNC_REQUEST_URI
    The attribute name for the URI of the async request
    See Also:
      - Constant Field Values

  - ### ASYNC_CONTEXT_PATH

    static final String ASYNC_CONTEXT_PATH
    The attribute name for the Context Path of the async request
    See Also:
      - Constant Field Values

  - ### ASYNC_MAPPING

    static final String ASYNC_MAPPING
    The attribute name for the Mapping of the async request
    See Also:
      - Constant Field Values

  - ### ASYNC_PATH_INFO

    static final String ASYNC_PATH_INFO
    The attribute name for the Path Info of the async request
    See Also:
      - Constant Field Values

  - ### ASYNC_SERVLET_PATH

    static final String ASYNC_SERVLET_PATH
    The attribute name for the Servlet Path of the async request
    See Also:
      - Constant Field Values

  - ### ASYNC_QUERY_STRING

    static final String ASYNC_QUERY_STRING
    The attribute name for the Query String of the async request
    See Also:
      - Constant Field Values

- ## Method Details

  - ### getRequest

    ServletRequest getRequest()
    Returns:
      a reference to the ServletRequest object

  - ### getResponse

    ServletResponse getResponse()
    Returns:
      a reference to the ServletResponse object

  - ### hasOriginalRequestAndResponse

    boolean hasOriginalRequestAndResponse()
    Returns:
      true if the Request and Response are the original ones

  - ### dispatch

    void dispatch()
    Throws:
      `IllegalStateException` - if this method is called when the request is not in asynchronous mode. The request is in asynchronous mode after `ServletRequest.startAsync()` or `ServletRequest.startAsync(ServletRequest, ServletResponse)` has been called and before `complete()` or any other dispatch() method has been called.

  - ### dispatch

    void dispatch(String path)
    Parameters:
      `path` - The path to which the request/response should be dispatched relative to the `ServletContext` from which this async request was started.
    Throws:
      `IllegalStateException` - if this method is called when the request is not in asynchronous mode. The request is in asynchronous mode after `ServletRequest.startAsync()` or `ServletRequest.startAsync(ServletRequest, ServletResponse)` has been called and before `complete()` or any other dispatch() method has been called.

  - ### dispatch

    void dispatch(ServletContext context, String path)
    Parameters:
      `context` - The `ServletContext` to which the request/response should be dispatched.
      `path` - The path to which the request/response should be dispatched relative to the specified `ServletContext`.
    Throws:
      `IllegalStateException` - if this method is called when the request is not in asynchronous mode. The request is in asynchronous mode after `ServletRequest.startAsync()` or `ServletRequest.startAsync(ServletRequest, ServletResponse)` has been called and before `complete()` or any other dispatch() method has been called.

  - ### complete

    void complete()
    Completes the async request processing and closes the response stream

  - ### start

    void start(Runnable run)
    Starts a new thread to process the asynchronous request
    Parameters:
      `run` - a Runnable that the new thread will run

  - ### addListener

    void addListener(AsyncListener listener)
    Adds an event listener that will be called for different AsyncEvents fire
    Parameters:
      `listener` - an AsyncListener that will be called with AsyncEvent objects

  - ### addListener

    void addListener(AsyncListener listener, ServletRequest request, ServletResponse response)
    Adds an event listener that will be called when different AsyncEvents fire
    Parameters:
      `listener` - an AsyncListener that will be called with AsyncEvent objects
      `request` - the ServletRequest that will be passed with the AsyncEvent
      `response` - the ServletResponse that will be passed with the AsyncEvent

  - ### createListener

    <T extends AsyncListener> T createListener(Class<T> clazz) throws ServletException
    Creates and returns an AsyncListener object
    Type Parameters:
      `T` - The type to create that extends AsyncListener
    Parameters:
      `clazz` - The class to instantiate to create the listener
    Returns:
      the newly created AsyncListener object
    Throws:
      `ServletException` - if the listener cannot be created

  - ### setTimeout

    void setTimeout(long timeout)
    Set the timeout.
    Parameters:
      `timeout` - The timeout in milliseconds. 0 or less indicates no timeout.

  - ### getTimeout

    long getTimeout()
    Get the current timeout.
    Returns:
      The timeout in milliseconds. 0 or less indicates no timeout.