這是我部署到碼頭的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連接時,它應該停止。