【问题标题】:How would one send a String from Java to JavaScript over a network?如何通过网络将字符串从 Java 发送到 JavaScript?
【发布时间】:2017-03-07 08:20:11
【问题描述】:

我有一个用 Java 生成的 JSON 字符串,我需要将此字符串发送到另一台计算机,该计算机将通过 JavaScript 接收它(因为 electron)。 JavaScript 计算机可能在很远的地方,并且会通过 Internet 联系 Java 应用程序。

Java 应用程序不是某种网络应用程序,它是一个简单的后端应用程序。

我该怎么做?

【问题讨论】:

  • 我的理解是你将java应用程序生成的JSON数据发送到另一个通过javascript接收数据的系统。然后,您将输入 javascript 并发送到 Java 应用程序。
  • @RajeshHatwar 这是正确的。
  • 此链接将帮助您做事tutorialspoint.com/java8/java8_nashorn.htm
  • 您需要使用 Java 8,因为它引入了一个新引擎来与称为 V8-Engine 的 javascript 进行通信
  • 创建一个webservice返回JSON字符串,这个webservice可以在任何地方调用。所以你可以从java脚本调用它

标签: javascript java string networking io


【解决方案1】:

有两种选择:

1.)

通过网络服务。

Web 服务 是一种将一种编程语言与另一种编程语言通信的技术。例如,Java 编程语言可以通过使用 Web 服务与 PHP 和 .Net 进行交互。换句话说,Web 服务提供了一种实现互操作性的方法。

如图所示,Java、.Net 或 PHP 应用程序可以通过网络上的 Web 服务与其他应用程序进行通信。例如,java 应用程序可以与 Java、.Net 和 PHP 应用程序(在本例中为 JavaScript)交互。

所以网络服务是一种独立于语言的通信方式

借助 Jax-RS,您可以通过称为 REST 的 Web 服务发送 JSON。

REST 代表 REpresentational State Transfer。它是一种常用的网络服务。

但是您需要构建一个 HTTP 服务器、一个应用程序服务器 (Jboss) 或至少一个 servlet 容器 (tomcat)。

然后,您将能够在浏览器中使用 Ajax 检索您的 JSON 字符串,或者使用电子卷曲客户端。

Read more about building Java Web Services here

2.)

通过 Java 核心程序套接字服务器

如果你想避免 JEE,你可以构建一个 java 核心程序套接字服务器,侦听 IP+端口,并通过像 raw-socket 这样的 npm 包从 JavaScript 请求这个服务器(并接收 Json 字符串)

【讨论】:

    【解决方案2】:

    要使您的 Java 应用程序可以从外部访问,您需要以某种方式将其公开给网络。有很多方法可以做到这一点,但可以说是最简单的,至少你会找到最简单的帮助的方法是将其公开为可通过 HTTP 访问的 Web 应用程序。同样,实际上有数百种方法可以做到这一点,您应该真的阅读 Java 中的 Web 开发。

    假设您现有的应用程序做了这样的事情(我不知道它实际上做了什么,因为您没有提供任何信息):

    public class JsonMaker {
        public String getJson( ... ) {
            return "{\"hello\" : \"world\"}";
        }
    }
    

    将其公开为网络应用程序

    现在,我知道制作 Java Web 应用程序的最快方法是使用 Spark。这是一个微型框架,几乎不需要任何努力。

    要将其公开到网络上,您需要做的就是:

    1. 声明对 Spark 的依赖(或 download the jar 并将其放在您的类路径中):
    <dependency>
        <groupId>com.sparkjava</groupId>
        <artifactId>spark-core</artifactId>
        <version>2.5</version>
    </dependency>
    
    1. 制作一个简单的服务器来监听 HTTP 调用并使用您的 JSON 响应它们:

    import static spark.Spark.*;

    public class SimpleServer {
        public static void main(String[] args) {
            get("/json", (req, res) -> {
                res.type("application/json");
                return new JsonMaker().getJson( ... );
            });
        }
    }
    
    1. 将此应用程序作为普通 Java 应用程序运行,您将有一个服务器在端口 4567 上侦听 HTTP GET 请求并将您的 JSON 提供给它们。打开浏览器并转到:

      http://localhost:4567/json

    您会收到{"hello": "world"} 回复。

    现在,您的客户端 (JavaScript) 应用需要发出与浏览器相同的 GET 请求,它会得到响应。

    阅读Spark documentation 以了解如何读取路径/查询字符串参数等,以便您可以参数化您的请求并根据给定值做出不同的反应。

    TCP 套接字

    正如 Kevin Ternet 在他的回答中指出的那样,您不妨直接在 Java 应用程序中侦听套接字:

    public static void main(String[] args) throws IOException {
        ServerSocket listener = new ServerSocket(9090);
        try {
            while (true) {
                Socket socket = listener.accept();
                try {
                    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                    out.println(new JsonMaker().getJson( ... ));
                } finally {
                    socket.close();
                }
            }
        }
        finally {
            listener.close();
        }
    }
    

    这样,您的客户端和服务器将直接通过 TCP 进行通信,而不是通过定义的协议(如 HTTP)。您的 JavaScript 客户端可以在端口 9090 上打开与服务器的 TCP 连接并直接发送/接收消息。因为它的级别要低得多,所以你必须自己做很多繁重的工作,所以这种方式不推荐

    注意事项

    您的问题有无数种选择,而且您的问题相当广泛和模糊。 Spark 只是让您开始使用 Web 应用程序的一种快速而简单的方法。 Kevin 公平地指出了 REST,这是您可能应该采用的策略。 JAX-RS 是一种执行 REST 的 Java 标准方式,但您也可以使用 Spark 或任何其他非兼容框架来执行此操作。你真的需要在这里阅读和学习很多东西。

    对于在 Java 中使用 JSON,您还有无数种选择,JacksonGSON 是两个流行的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      相关资源
      最近更新 更多