繁体   English   中英

Servlet-关闭连接但不是方法

[英]Servlet - close connection but not method

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

可以关闭连接但不能终止方法? 还是在连接关闭时启动另一种方法?

好吧,在规范中尚不清楚,但是它似乎可以在Tomcat 7.0中使用。

从Servlet 3.0的规范中摘录:

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

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

根据我在tomcat 7.0.32上的测试,当ContentLength设置为0 并且关闭了输出流时,在servlet的service方法结束之前关闭Http连接。

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

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

要小心,我能找到的规格没有确认,因此不能与其他容器中工作。

@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
        .
        .
        .
        .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM