我创建了一个JSP,它将创建可能无限量的输出。如果浏览器停止,我该如何停止这个JSP?
当我告诉浏览器停止浏览器时,浏览器停止了,但是我的控制台告诉我,JSP的servlet一直在运行。
我想知道,如果浏览器停止接收数据我是否以及如何修改这个代码,以便它会停止:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" errorPage="ExcessOutputErrorPage.jsp" %>
<%@ page import="de.svenjacobs.loremipsum.LoremIpsum" %>
<%@ page buffer="8kb" autoFlush="true" %>
<%!
private int dumpCount = 0;
private String nextDump()
{
dumpCount++;
String dumpHeader = "Dumping " + dumpCount + " paragraphs";
String dump = "<h2>" + dumpHeader + "</h2>";
LoremIpsum loremIpsum = new LoremIpsum();
System.out.println(dumpHeader);
for (int i=0; i<dumpCount; i++)
{
dump += "<p>" + loremIpsum.getParagraphs(1) + "</p>";
}
return dump;
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Large Amount of Text</title>
</head>
<body>
<h1>Large Amount of Text</h1>
<%
boolean doDump = true;
while (doDump)
{
out.println(nextDump());
out.flush();
}
%>
</body>
</html>
您最终应该得到一个“断管”类IOException。但是在servlet容器和前面的任何Web服务器中都有缓冲。我怀疑你可以做的不仅仅是调用'flush'(你已经在做)。 – Thilo 2010-10-15 07:12:16
我已经让它运行了很长时间,并且不停止。我还发现了一些有趣的事情:如果我再次访问该页面,无论是相同的浏览器还是不同的浏览器,呈现的页面取决于最初启动后servlet进展的程度。 – 2010-10-15 16:35:42
发现了一些更有趣的事情。如果我在第一个浏览器窗口打开的情况下尝试浏览第二个浏览器窗口中的页面,则在关闭或停止第一个浏览器窗口之前,第二个浏览器窗口中不会显示任何内容。如果两个浏览器正在等待,它会将一些内容发送给另一个,而对另一个则不发送内容。如果三个浏览器正在等待,它只发送给一个。但是如果有四个人在等待,三个人就会得到内容如果两个人正在接收内容,他们必须在另一个人(或者两个人)开始接收内容之前终止。 – 2010-10-15 16:45:42