Проблема проекта Basic Server Sent Events (SSE) при получении данных с сервера
Я пытаюсь создать приложение для отправки событий с сервера (SSE) в качестве учебного упражнения, используя следующий код. Я использую Eclipse Java EE IDE для веб-разработчиков и создал динамический веб-проект. Я использую сервер Tomcat 9.0. Когда я ввожу http://localhost:8080/HAserver в качестве URL-адреса FireFox или Chrome, отображается файл index.html, но процесс "запуска" не запускается. Я не получаю данных с сервера, когда нажимаю кнопку "Пуск". Если я http://localhost:8080/HAServer/haservlet в качестве URL FF или Chrome, я получу данные в окне браузера. Таким образом, вопрос заключается в следующем: почему мой index.html не отображает никаких данных, полученных с сервера, но все же окно браузера будет получать и отображать данные?
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HAServer client</title>
</head>
<body>
<button id = "startButton" onclick="start()">Start</button>
<button onclick="stop()">Stop</button>
<button onclick="clearText()">Clear</button><br>
<textarea id="displayTextArea" readonly ="readonly" rows="30" cols="45"></textarea><br/>
<script>
var eventSource = null;
function start()
{
alert("start");
eventSource new EventSource("/haservlet");
eventSource.onOpen=function(){displayTextArea.value += 'Connected' + '\n';};
eventSource.onmessage=function(message){displayTextArea.value += message.data + '\n\n';};
eventSource.onerror=function(){displayTextArea.value += 'Error Occured' + '\n';};
startButton.disabled = true;
}
function stop()
{
alert("stop");
eventSource.close();
startButton.disabled= false;
}
function clearText()
{
alert("clear");
displayTextArea.value = '';
}
</script>
</body>
</html>
haservlet.java...
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class haservlet
*/
@WebServlet("/haservlet")
public class haservlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
response.setContentType("text/event-stream");
response.setCharacterEncoding("UTF-8");
PrintWriter printWriter = null;
while(true)
{
try
{
double randomNumber= Math.random() * 10000;
printWriter = response.getWriter();
printWriter.print("data: " + "[next server time check event in " + Math.round(randomNumber/1000) + " seconds" );
printWriter.print("data: " + "Time: " + Calendar.getInstance().getTime());
response.flushBuffer();
try {
Thread.sleep((long)randomNumber);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
catch (IOException e){
printWriter.close();
break;
}
}
}
}