0


我正在尝试读取 servlet 中的文件并将其作为分块消息发送(响应)到 jsp,我可以在浏览器中将其作为纯文本查看。
这是我尝试过的:
Servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/plain");
    response.setHeader("Transfer-Encoding", "chunked");
    response.setHeader("Connection", "keep-alive");
    //response.flushBuffer();
    try (PrintWriter writer = response.getWriter();BufferedReader br = new BufferedReader(new FileReader("/some/file/path.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                writer.println(line);
                try{Thread.sleep(500);}
                catch(InterruptedException e){}
            }
    }
}

jsp:

<head>
<meta charset="UTF-8">
<title>example</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    $(document).ready(function() {                                   
      $.get('/project/trial', function(responseText) {
        $('#message').text(responseText);                  
      });
  });
</script>
</head>
<body>
<div id="message"></div>
</body>

我需要每 500 毫秒用新行更新页面而不刷新页面,而是在读取整个文件后一次获取整个文件。
难道我做错了什么?我错过了什么吗?
我的jsp正确吗?
我在网上尝试了很多资源,但找不到我缺少的东西。
有没有什么例子可以让我获得对分块响应读写的支持?

提前致谢。

4

1 回答 1

2

我认为您在这里实际上想要做的是实现Comet的一个版本,也称为服务器推送。这可以通过 Ajax 完成,但需要仔细准备。

一种方法是利用multipart/x-mixed-replaceMIME 类型向客户端发送更新的内容。可以在此处找到一个示例(请注意,该示例中使用的边界不符合 MIME,恕我直言。部分之间的边界应该看起来像{$bondary}--,而最后一个应该是{$boundary}<CR><LF>)。然而,这是以 MSIE 功能受损为代价的。

可以在ajaxpatterns.org上找到一些替代方案中可比较的实现列表。无论如何,您应该确保您的输出编写器在写出一行后实际上被刷新。

于 2014-09-24T07:27:18.687 回答