2010-10-15 73 views
0

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

您最終應該得到一個「斷管」類IOException。但是在servlet容器和前面的任何Web服務器中都有緩衝。我懷疑你可以做的不僅僅是調用'flush'(你已經在做)。 – Thilo 2010-10-15 07:12:16

+0

我已經讓它運行了很長時間,並且不停止。我還發現了一些有趣的事情:如果我再次訪問該頁面,無論是相同的瀏覽器還是不同的瀏覽器,呈現的頁面取決於最初啓動後servlet進展的程度。 – 2010-10-15 16:35:42

+0

發現了一些更有趣的事情。如果我在第一個瀏覽器窗口打開的情況下嘗試瀏覽第二個瀏覽器窗口中的頁面,則在關閉或停止第一個瀏覽器窗口之前,第二個瀏覽器窗口中不會顯示任何內容。如果兩個瀏覽器正在等待,它會將一些內容發送給另一個,而對另一個則不發送內容。如果三個瀏覽器正在等待,它只發送給一個。但是如果有四個人在等待,三個人就會得到內容如果兩個人正在接收內容,他們必須在另一個人(或者兩個人)開始接收內容之前終止。 – 2010-10-15 16:45:42

回答

1

如果要控制從瀏覽器的過程中,你可能想看看在AJAX。公開loremIpsum對象並將AJAX代碼調用回您的服務器以繼續更新屏幕。

現在,在您的應用程序服務器上全時運行一個無限循環,多個請求可能會進入並嚴重減慢服務器速度。

根據我所看到的您發佈的代碼,loremIpsum對象似乎並非特定於用戶,因此您應該安全地使用AJAX以將循環和大部分工作關閉服務器資源和JavaScript/AJAX。

+0

有趣的想法,但循環實際上不應該是無限的 - 我期望它在瀏覽器斷開連接時停止。但似乎並非如此,我試圖找出如何阻止它。我想我可以在網頁中放入一些JavaScript,告訴它在用戶離開頁面時回家,但這將依賴於啓用了JavaScript的瀏覽器。 – 2010-10-15 23:39:51

相關問題