Проблема проекта 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;
            }
        }
    }
}

0 ответов

Другие вопросы по тегам