我正在尝试在servlet中读取一个文件并将其作为chunked消息发送(响应)到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是否正确?
我在网上尝试了很多资源但却找不到我所遗漏的内容
有没有任何例子可以让我获得有关阅读和写作的分块响应的支持?
提前致谢。
答案 0 :(得分:2)
我认为您实际上想要做的是实施Comet版本,也称为server pushing。这可以通过Ajax完成,但需要仔细准备。
执行此操作的一种方法是利用multipart/x-mixed-replace
MIME类型向客户端发送更新的内容。可以找到here的一个示例(请注意,该示例中使用的边界不符合MIME,恕我直言。部件之间的边界应该看起来像{$bondary}--
,而最后一个应该是{$boundary}<CR><LF>
)。然而,这是以MSIE功能受损为代价的。
可以在ajaxpatterns.org找到一些替代方案中的可比实施列表。无论如何,你应该确保在写出一行后你的输出编写器实际上被刷新了。