У меня есть очень простой SSE (событие, отправленное сервером Html5) с Java, используемой на стороне сервера. Я включил и клиент, и сервер ниже. Проблема в том, что если я изменю серверную сторону, даже простое изменение, такое как изменение текста в выводе отладки, которое не имеет ничего общего с фактическим текстом, отправленным на сервер, клиент перестанет публиковать полученные сообщения. На основе выходного сообщения, распечатываемого на стороне сервера, и трафика запросов, который я вижу как в Firebug, так и в инструменте разработчика Chrome, я вижу, что сервер отправляет сообщения, а браузер получает сообщение. Единственная проблема заключается в том, что функция JavaScript, которая должна запускаться при получении SSE, не запускается. Любое предложение, или вы видите что-то не так с моим кодом?
<!DOCTYPE html>
<html>
<body>
<h1>Getting server updates</h1>
<div id="result"></div>
<script>
if(typeof(EventSource)!=="undefined")
{
var source=new EventSource("/ServerSideForSSE/sse3");
source.onmessage=function(event)
{
document.getElementById("result").innerHTML+=event.data + "<br>";
};
}
else
{
document.getElementById("result").innerHTML=
"Sorry, your browser does not support server-sent events...";
}
</script>
</body>
</html>
package com.ultratech;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/sse3")
public class sse3 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setCharacterEncoding("utf-8");
response.setContentType("text/event-stream");
PrintWriter out = response.getWriter();
int x = 0;
while (x < 100)
{
x++;
Date currentTime_1 = new Date();
out.println("Current Time is: " + currentTime_1);
out.println();
out.flush();
System.out.println("Another message sent to the cleint ...");
if (x > 100) {System.exit(0);}
try {
Thread.sleep(5 * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//End of for().
out.close();
}//End of doGet().
}