要使您的 Java 应用程序可以从外部访问,您需要以某种方式将其公开给网络。有很多方法可以做到这一点,但可以说是最简单的,至少你会找到最简单的帮助的方法是将其公开为可通过 HTTP 访问的 Web 应用程序。同样,实际上有数百种方法可以做到这一点,您应该真的阅读 Java 中的 Web 开发。
假设您现有的应用程序做了这样的事情(我不知道它实际上做了什么,因为您没有提供任何信息):
public class JsonMaker {
public String getJson( ... ) {
return "{\"hello\" : \"world\"}";
}
}
将其公开为网络应用程序
现在,我知道制作 Java Web 应用程序的最快方法是使用 Spark。这是一个微型框架,几乎不需要任何努力。
要将其公开到网络上,您需要做的就是:
- 声明对 Spark 的依赖(或 download the jar 并将其放在您的类路径中):
<dependency>
<groupId>com.sparkjava</groupId>
<artifactId>spark-core</artifactId>
<version>2.5</version>
</dependency>
- 制作一个简单的服务器来监听 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( ... );
});
}
}
-
将此应用程序作为普通 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,您还有无数种选择,Jackson 和 GSON 是两个流行的选择。