java - 完成 HttpServletResponse 但继续处理

标签 java http servlets comet

我的情况似乎适合 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() 中

最佳答案

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

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

强烈推荐您阅读Java Concurrency in Practice ,这是一本很棒且非常实用的书。

关于java - 完成 HttpServletResponse 但继续处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2367650/

相关文章:

java - 如何国际化 Hibernate 实体

java - Avro 中 DatumWriter 的用途是什么

java - Maven Dependency Plugin 如何确定使用的依赖项

java - 如何在 web.xml 之外动态配置 WebLogicCluster 属性

java - Servlet从tomcat 7中的多部分表单获取参数

Java大富翁游戏

Java字节数组到字符串到字节数组

c# - 将各种数据一起发布的最佳方式(Web API)

c# - 如何在 ASP.NET Web 应用程序中设置表单变量?

http - HTTP 连接 header 值是否区分大小写?