如何通过网络将String从Java发送到JavaScript?

我有一个用Java生成的JSON字符串,我需要将这个字符串发送到另一台计算机,它将通过JavaScript(因为电子 )接收它。 JavaScript计算机可能很远,并将通过互联网与Java应用程序联系。

Java应用程序不是各种Web应用程序,它是一个简单的后端应用程序。

我该怎么办?

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

假设您现有的应用程序执行类似的操作(我不知道它实际上做了什么,因为您没有提供任何信息):

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

将其公开为网络应用程序

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

要将此信息公开给网络,您需要做的就是:

  1. 声明对Spark的依赖(或下载jar并将其放在类路径上):
  com.sparkjava spark-core 2.5  
  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://本地主机:4567 / JSON

然后你会得到{"hello": "world"}

现在,您的客户端(JavaScript)应用程序需要与您的浏览器进行相同的GET请求,并且它将获得响应。

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

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是一种Java标准的REST方式,但您也可以使用Spark或任何其他非兼容框架来实现。 你真的需要在这里阅读和学习很多东西。

为了在Java中使用JSON,你再次拥有无数选项, Jackson和GSON是两个受欢迎的选择。

有两种选择:

1.)

通过Web服务。

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

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

因此,Web服务是一种独立于语言的通信方式

您可以通过名为REST的Web服务发送JSON,例如感谢Jax-RS。

REST代表REpresentational State Transfer。 它是一种通常首选的Web服务。

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

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

阅读有关构建Java Web服务的更多信息

2.)

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

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