3

这是我的服务器 JSP 代码“Server_Date.jsp”

<%
response.setHeader("cache-control", "no-cache"); 
response.setContentType("text/event-stream");
out.print("data: " + (new java.util.Date()).toString() + "x\n\n");
out.flush();   
%>

这是我的客户端 jsp 页面“Client_Serverdate.jsp”

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body  onload="begin()">
<h1>Getting server updates</h1>
<div id="result"></div>
<script >
if(typeof(EventSource)!=="undefined")
{     
var source=new EventSource("Server_Date.jsp");      
source.addEventListener("message", function(event) {
    document.getElementById("result").innerHTML = event.data;
}, false);
}
else
{
document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events...";
}
</script>   
</body>
</html>

请帮助我,此代码在 Mozilla Firefox、Opera 中运行良好,但在 Google Chrome 中无法运行(我也检查了 18.x 和 20.x)。

它会转到我已经用 print 语句检查过的服务器页面,但它没有出现document.getElementById("result").innerHTML = event.data;

4

4 回答 4

1

我曾经有同样的问题。作为服务器部分,我使用了 PHP,但我想它的工作原理是一样的。为我解决的问题是添加ob_flush(). 现在,我不知道你的语言应该是什么,但也许它可以帮助你朝着正确的方向前进。

于 2012-07-20T12:15:21.827 回答
1

对于一个人来说,你正在调用一个begin()未定义的函数,尽管这不应该是这里的问题。

Chrome 开发控制台是否显示任何错误?它应该至少显示一个。因为开始功能。网络选项卡是否显示到 Server_Date.jsp 的流量?

于 2012-07-04T12:58:42.133 回答
1

问题已解决

解决方案 :

页面编码问题:客户端使用 UTF-8 编码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

未提及服务器端 UTF-8,因此在 setContentType 添加 charset=UTF-8 后,它的工作

response.setContentType("text/event-stream;charset=UTF-8");

感谢人们努力回答我的问题

于 2013-06-05T07:23:03.527 回答
1

我遇到了同样的问题,我通过在 servlet 末尾添加一个换行符来解决它。像这样:

response.setContentType("text/event-stream;charset=UTF-8");
response.addHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
out.println("data: " + new Date());
out.println();
out.flush();
out.close();
于 2013-05-18T13:32:53.347 回答