     (handle [_ ^Request base-request request response]
       (let [request-map  (servlet/build-request-map request)
             response-map (handler request-map)]
-        (when response-map
-          (servlet/update-servlet-response response response-map)
-          (.setHandled base-request true))))))
+        (servlet/update-servlet-response response response-map)
+        (.setHandled base-request true)))))
+
+(defn- ^AbstractHandler async-proxy-handler [handler]
+  (proxy [AbstractHandler] []
+    (handle [_ ^Request base-request request response]
+      (let [^AsyncContext context (.startAsync request)]
+        (handler
+         (servlet/build-request-map request)
+         (fn [response-map]
+           (servlet/update-servlet-response response response-map)
+           (.complete context)
+           (.setHandled base-request true)))))))
 
 (defn- ^ServerConnector server-connector [server & factories]
   (ServerConnector. server (into-array ConnectionFactory factories)))

  supplied options:

  :configurator         - a function called with the Jetty Server instance
  :port                 - the port to listen on (defaults to 80)
  :host                 - the hostname to listen on
  :join?                - blocks the thread until server ends (defaults to true)

           [org.eclipse.jetty.server.handler AbstractHandler]
           [org.eclipse.jetty.util.thread ThreadPool QueuedThreadPool]
           [org.eclipse.jetty.util.ssl SslContextFactory]
           [javax.servlet AsyncContext]
           [javax.servlet.http HttpServletRequest HttpServletResponse]))

(defn- ^AbstractHandler proxy-handler [handler]
