我的情况似乎适合 Async Servlet 3.0/Comet 情况,但我需要做的就是在接受传入参数后返回 200 响应代码(或其他)。
有没有办法让 HttpServlet 完成 http 请求/响应握手并继续处理?
有点像...
doPost( req, response ) {
// verify input params...
response.setStatus( SC_OK );
response.close();
// execute long query
}
编辑:查看 javax.servlet 包 - 我的问题的正确措辞是
如何提交响应?
在 Servlet.isCommitted() 中
最佳答案
以下是我处理这种情况的方法:
- 当应用程序启动时,创建一个
ExecutorService
withExecutors.newFixedThreadPool(numThreads)
(还有其他类型的执行器,但我建议从这个开始) - 在
doPost()
中,创建一个Runnable
的实例这将执行所需的处理 - 您的任务 - 并将其提交给ExecutorService
,如下所示:executor.execute(task)
- 最后,您应该返回 HTTP 状态
202 Accepted
,如果可能,还有一个Location
header ,指示客户端可以在何处检查处理状态。
我强烈推荐您阅读Java Concurrency in Practice ,这是一本很棒且非常实用的书。
关于java - 完成 HttpServletResponse 但继续处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2367650/