【发布时间】:2014-09-24 05:29:49
【问题描述】:
我正在尝试读取 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正确吗?
我在网上尝试了很多资源,但找不到我缺少的东西。
是否有任何示例可以让我获得对分块响应读写的支持?
提前致谢。
【问题讨论】:
-
这样不行。浏览器将等待读取整个响应然后呈现它。如果您希望分段刷新,则必须通过 AJAX 执行某些操作。 NB 这与分块传输模式无关。
-
哦,好的。您能否通过一些示例向我建议如何在这种情况下使用 AJAX 以及如何使用分块消息。有什么场景可以同时使用吗?
-
此外......您发送的内容并不是真正的块编码。那将是
<chunklength><CR><LF><chunk><CR><LF>。除非 JSP 通过一些神奇的干预来解决这个问题,否则请咨询RFC 7230, sec 4.1ff -
@DaSourcerer 你的意思是我们必须把数据分成块然后发送吗?
-
@Y.Prithvi 除其他外。现在正在准备完整的答案。
标签: java jsp http servlets transfer-encoding