2010-10-15 74 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

相关问题