这是我部署到码头的servlet代码:码头servlet没有检测到客户端已断开
public class StreamServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/xml; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
InputStream is = this.getServletContext().getResourceAsStream("A.xml");
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, Charset.forName("UTF-8")));
String line = "";
try
{
while((line = reader.readLine()) != null) {
getServletContext().log(line);
writer.println(line);
writer.flush();
Thread.sleep(1500); // for testing
}
}
catch (InterruptedException e)
{
getServletContext().log("exception",e);
}
}
}
然后我在命令行
curl -i http://localhost:8080/foo/servlet
文件A.xml
包含上运行约13,000行;所以curl 1.5秒后正确显示它收到的每一行。然后我中断了curl,但令我惊讶的是servlet继续运行;即在这个while循环中。
while((line = reader.readLine()) != null) {
getServletContext().log(line);
writer.println(line);
writer.flush();
Thread.sleep(1500); // for testing
}
它为什么表现出这种行为?我没有使用延续。我正在运行Jetty 6.1.26。我想要的是:当servlet线程检测到客户端已经终止http连接时,它应该停止。