Servlet - 关闭连接但不是方法

时间:2014-08-20 08:42:56

标签: java servlets

我必须实现服务(servlet 2.5或3),它将在每个连接上发送204代码但不关闭线程。 我需要对收到的数据做一些处理(比如打开新连接)。

可以关闭连接而不是结束方法吗?或者在连接关闭时启动另一种方法?

2 个答案:

答案 0 :(得分:1)

目前还不清楚规格,但它似乎适用于Tomcat 7.0。

从servlet 3.0的规范中提取:

  

关闭响应对象
  当响应关闭时,容器必须立即清除所有剩余的响应   响应缓冲区中的内容到客户端。以下事件表明了   servlet已满足请求并且响应对象将被关闭:

      
  • 终止servlet的服务方法。
  •   
  • 响应的setContentLength方法中指定的内容量   已大于零并已写入回复。
  •   
  • 调用sendError方法。
  •   
  • 调用sendRedirect方法。
  •   
  • 调用AsyncContext上的完整方法。

从我对tomcat 7.0.32的测试中,当ContentLength设置为0 时,Http连接在servlet的service方法结束之前关闭,输出流是闭合。

因此,根据您的要求,您可以在servlet中尝试以下操作:

response.setStatus(HttpServletResponse.SC_NO_CONTENT);
response.setContentLength(0);
response.getOutputStream().close();
// continue after connection with client is closed

BEWARE 我在规格中找不到任何确认信息,因此无法使用其他容器。

答案 1 :(得分:0)

@Override
protected void doPost(final HttpServletRequest req, final HttpServletResponse resp)
        throws ServletException {
        //Send 204 back
        resp.setStatus(HttpServletResponse.SC_NO_CONTENT);
        // Continue with you logic here
        .
        .
        .
        .