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>

このコードはMozillaFirefox、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

1つは、定義されていない関数を呼び出してbegin()いますが、ここでは問題にはならないはずです。

Chrome開発コンソールにエラーが表示されますか?少なくとも1つ表示する必要があります。begin関数のため。また、[ネットワーク]タブにはServer_Date.jspへのトラフィックが表示されますか?

于 2012-07-04T12:58:42.133 に答える
1

同じ問題が発生しましたが、サーブレットの最後に改行を追加することで解決しました。このような:

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 に答える
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 に答える