java - 如何从客户端桌面应用程序向服务器端 Spring 应用程序发出请求?

标签 java spring swing spring-mvc jdbc

我们将创建一个客户端-服务器端应用程序,其中客户端最初被请求为桌面应用程序。我们没有使用 Java 创建这些应用程序的经验,但我们已经开始考虑将要使用的工具。

例如,我们决定使用 Spring 作为接收请求、处理请求的框架,最终从数据库 (MySQL) 获取数据,然后返回一个回应。

我还不确定这些响应(以及来自客户端应用程序的请求)的格式是什么,但它应该尽可能独立于客户端,以便如果客户改变意见并决定他/她想要一个网络或移动应用程序,我们不需要更改处理所有请求的服务器端代码。

通过查看我们其中一位在该领域已经有一定经验的人提供的项目源代码,显然他使用了 HttpServletRequestHttpServletResponse 对象作为 Controller 所有方法的参数。我认为这是一个服务器端 Spring 应用程序。在本例中,具体而言,它将是一个 Controller 类,用于处理对特定 URL 的请求。

代码更容易理解,因为它类似于我之前使用 Javascript、Node、Express 和 Mongo 的方式。这一切都是基于MVC模式的。在该环境中,请求是通过在浏览器上写入 URL 或使用 XMLHttpRequest (AJAX) 来发出的。

现在,我的疑惑和问题是:

  1. 如果我们确实需要创建一个桌面应用程序(例如使用 Swing),我们将如何向 Spring Controller 发出请求?

  2. 将服务器端代码与客户端代码解耦的最佳方法是什么? JSON 在这里有用吗?如果是的话,大概会用多少?

  3. 我们是否应该在客户端使用一个框架,该框架负责在必要时向 Spring Controller 发出请求的特定工作,或者是否足以以某种方式对请求进行硬编码?这个框架最终将如何处理 Swing?

  4. JDBC 适合哪里?我想在服务器端代码中。但我们到底什么时候应该使用它呢?

抱歉,问题很多,但我们之前没有接触过这些环境,所以不知何故迷失了方向。

最佳答案

如果您要在服务器端使用 Spring MVC 和 REST Controller ,则需要一个 REST 客户端库,它将向后端发送 HTTP 请求。它不一定需要以任何方式连接到 Spring。

  1. 您可以从 this answer 检查 REST 客户端,然后选择您喜欢的一个。 UniRest 可能是桌面应用程序的不错选择。

  2. 解耦是通过提供 Restful API 来完成的,这意味着任何可以发送 HTTP 请求的客户端都可以使用您的后端服务。您可以使用任何编程语言和任何您想要的框架来编写客户端应用程序(在您的情况下为桌面应用程序)。通信是通过 HTTP 完成的,这是解耦的一个很好的例子(与 RMI 不同)。 是的,JSON 可能是一个不错的选择,大多数其他 API 使用 JSON 作为数据交换格式。但您不需要,您也可以使用 XML 或任何其他格式(但我强烈推荐 JSON 和 Jackson 作为库)

  3. 您也可以在客户端应用程序上遵循 MVC 方法,但这取决于您使用的框架等。但基本上您需要的只是将请求发送到后端,您可以按照您想要的方式执行此操作。为了拥有一个漂亮的结构,您可以将数据端点隐藏在接口(interface)后面,并且接口(interface)的具体实现调用后端并提供数据。您还可以将端点 URL 外部化到配置文件以保持组织良好的结构。或者,如果这只是一个简单的项目,那么是的,您可以硬编码并内联完成所有操作。这完全取决于你。

  4. 在 Java 中 JDBC 仅用于连接到数据库。因此,如果您没有(关系)数据库,则根本不需要它。由于您提到您将使用 MySQL,因此您需要在服务器端使用它。只需获取 MySQL JDBC 驱动程序(如果您使用 Maven 从 here 获取依赖项),它就是用于 MySQL 连接的 JDBC API 的实现。

最后一件事:不要使用旧的、过时的 Swing,而是考虑使用 JavaFX。它是用 Java 制作桌面应用程序用户界面的新首选方式。

关于java - 如何从客户端桌面应用程序向服务器端 Spring 应用程序发出请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35813378/

相关文章:

java - 如何使用java读取Excel文件(xlsx)的大量数据

java - 为什么 gmail oauth 在我的 Android 应用程序中不起作用?

java - 停止在 Java 中执行更多代码

java - 在 Spring Websocket 上向特定用户发送消息

java - JComboBox 单元渲染器在 Windows 外观和感觉下失败

Java 没有绘制所需的图形

java - 在正则表达式中排除空格,但保留下划线和连字符

java - Helm Chart Spring Boot 应用程序启动后立即关闭

java - 如何将 JButton 放置在小程序的底部?

java - 更新时发生 TransactionRequiredException