完成HttpServletResponse但继续处理

Ste*_*vko 8 java servlets comet http

我的情况似乎符合Async Servlet 3.0/Comet情况,但我需要做的就是在接受传入参数后返回200响应代码(或其他).

有没有办法让HttpServlet完成http请求/响应握手并继续处理?

就像是...

doPost( req, response ) {
   // verify input params...
   response.setStatus( SC_OK );
   response.close();
   // execute long query
}     
Run Code Online (Sandbox Code Playgroud)

编辑:看看javax.servlet包 - 我的问题的正确措辞是

我如何提交回复?

在Servlet.isCommitted()中

Avi*_*lax 6

以下是我处理这种情况的方法:

  1. 当应用程序启动时,创建一个ExecutorServicewith Executors.newFixedThreadPool(numThreads)(还有其他类型的执行程序,但我建议从这个开始)
  2. doPost(),创建一个实例Runnable将执行所需的处理 - 您的任务 - 并将其提交给ExecutorService类似,所以:executor.execute(task)
  3. 最后,您应该返回HTTP状态202 Accepted,如果可能的话,还应该返回一个Location标题,指示客户端能够检查处理状态的位置.

强烈建议您阅读Java Concurrency in Practice,这是一本非常棒且非常实用的书.