<%@page session="false"%>
Use cases:

1. Simple dispatch 
 - servlet does startAsync()
 - background thread calls ctx.dispatch() 
   "> Async 0 
 
2. Simple dispatch
 - servlet does startAsync()
 - background thread calls dispatch(/path/to/jsp)
   "> Async 1 
 
3. Simple dispatch
 - servlet does startAsync()
 - background thread calls writes and calls complete()
   "> Async 2 

4. Simple dispatch
 - servlet does a startAsync()
 - servlet calls dispatch(/path/to/jsp)
 - servlet calls complete()
   "> Async 3 

3. Timeout s1
 - servlet does a startAsync()
 - servlet does a setAsyncTimeout
 - returns - waits for timeout to happen should return error page 
 
4. Timeout s2
 - servlet does a startAsync()
 - servlet does a setAsyncTimeout
 - servlet does a addAsyncListener
 - returns - waits for timeout to happen and listener invoked 
 
5. Dispatch to asyncSupported=false servlet
 - servlet1 does a startAsync()
 - servlet1 dispatches to dispatch(/servlet2)
 - the container calls complete() after servlet2 is complete
 - TODO
 
6. Chained dispatch
 - servlet1 does a startAsync
 - servlet1 does a dispatch to servlet2 (asyncsupported=true)
 - servlet2 does a dispatch to servlet3 (asyncsupported=true)
 - servlet3 does a dispatch to servlet4 (asyncsupported=false) 
 
 
7. Stock ticker
   "> StockTicker