我創建了一個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