我必须实现服务(servlet 2.5或3),它将在每个连接上发送204
代码但不关闭线程。
我需要对收到的数据做一些处理(比如打开新连接)。
可以关闭连接而不是结束方法吗?或者在连接关闭时启动另一种方法?
答案 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
.
.
.
.