[英]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.