使用 Java Servlet 3 和 tomcat 的 HTML5 服务器发送事件

标签 html tomcat server-sent-events

我尝试在 Eclipse 中使用 Tomcat 运行此代码,但我没有从客户端的服务器获得任何输出。我应该在项目中包含一些库(jar 文件、js 文件...)吗?谢谢。

这里有两个文件:

<html>
<body onload ="registerSSE()" >
    <script>
        function registerSSE()
        {
            alert('test 1');
            var source = new EventSource('http://localhost:8080/hello/sse');  
            alert('Test2');
            source.onmessage=function(event)
            {
                document.getElementById("result").innerHTML+=event.data + "<br />";
            };
            /*source.addEventListener('server-time',function (e){
                alert('ea');
            },true);*/
        }
    </script>
    <output id ="result"></output>

</body>
</html>

小服务程序:

import java.io.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class sse extends HttpServlet {
   public void doPost(HttpServletRequest request, HttpServletResponse response) {
        try {
            System.out.println("SSE Demo");
            response.setContentType("text/event-stream");

            PrintWriter pw = response.getWriter();
            int i=0;
            while(true) {
                i++;
                pw.write("event: server-time\n\n");  //take note of the 2 \n 's, also on the next line.
                pw.write("data: "+ i + "\n\n");
                System.out.println("Data Sent!!!"+i);
                if(i>10)
                break;
            }
            pw.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void doGet(HttpServletRequest request,HttpServletResponse response) {
        doPost(request,response);
    }

}

我需要哪个版本的 tomcat?以及我应该需要哪种连接器类型?

_ WEB.XML _

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>demo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
        <servlet-name>sse</servlet-name>
        <servlet-class>sse</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>sse</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

</web-app>

最佳答案

我不知道 EventResource,但我知道,如果您能够在浏览器中打开资源,它应该让您领先一步。

在 web.xml 中进行如下更改:-

  1. <servlet-class>使用包名称提供 servlet 的完整路径,如 - com.test.sse
  2. <url-pattern>你可以制作/*在这里,它适用于每个 URL。

进行此更改后,尝试在浏览器中打开资源并查看是否有帮助。

关于使用 Java Servlet 3 和 tomcat 的 HTML5 服务器发送事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17247510/

相关文章:

tomcat - 将带有 SAAJ 的 SOAPMessage 发送到 Tomcat 上的 servlet

http-equiv 上的 Javascript Hook ="refresh"

postgresql - postgreSQL 服务器中的连接尝试失败

javascript - 为 Google Charts 设置不同的范围

java - Tomcat v9.0 服务器在 Eclipse 中启动错误

javascript - 使用 Ruby Grape 服务器发送的事件

firebase - Firebase Firestore REST API 是否支持流式传输

java - 将 EventSource(服务器发送的事件)连接到服务器时出错

javascript - 如何将符号或文本放入图像的单击位置

javascript - 如何将函数返回插入innerHTML