【问题标题】:How to do requests to a server-side Spring app from a client-side desktop app?如何从客户端桌面应用程序向服务器端 Spring 应用程序发出请求?
【发布时间】:2016-03-05 11:13:26
【问题描述】:

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

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

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

通过查看我们其中一位已经在该领域具有一定经验的项目的源代码,显然他使用了HttpServletRequestHttpServletResponse对象作为控制器所有方法的参数。我认为这是一个服务器端的 Spring 应用程序。在这种情况下,具体来说,它将是一个控制器类,它处理对某个 URL 的请求。

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

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

  1. 如果我们真的需要创建一个桌面应用程序,例如使用 Swing,我们将如何向 Spring 控制器发出请求?

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

  3. 我们是否应该在客户端也使用一个框架,该框架负责在必要时向 Spring 控制器发出请求,或者以某种方式对请求进行硬编码就足够了?这个框架最终会如何处理 Swing?

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

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

【问题讨论】:

  • 您可以使用hc.apache.org/httpcomponents-client-ga 在客户网站上进行请求。只需将您的请求序列化为 JSON,将其发送到服务,然后取消序列化来自服务器的 JSON。

标签: java spring swing spring-mvc jdbc


【解决方案1】:

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

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

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

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

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

最后一件事:考虑使用 JavaFX,而不是使用旧的 &outdated Swing。它是在 Java 中创建桌面应用程序用户界面的新的首选方式。

【讨论】:

  • 第 3 点。“您也可以在客户端应用程序上遵循 MVC 方法,但这取决于您使用的框架等”。我们使用的框架是指我们在客户端使用哪个 REST 库,还是什么?或者,如果没有,哪些框架允许我在客户端也设置 MVC 方法?还是一个休息库正是这个?
  • 能否请您更好地阐明第 3 点(如果您有时间并且愿意:)?我觉得我不太明白你在说什么……
  • Point 4. 有经验的队友建议使用MySQLWorkbench来处理数据库。为什么此时我们需要 JDBC?或者如果我们仍然需要它,它到底适合哪里?
  • @nbro 不,rest 库与此无关。 MVC 是一种将模型、视图和控制器分开的模式,意味着将您的业务逻辑与您的 UI 及其相关数据分开。这取决于您使用的 UI 框架。
  • @nbro MySQL 工作台是一个图形工具,用于操作数据库、发送查询等。它是用户产品,不可编程,不提供 API 等。它与 JDBC 完全不同。 JDBC 是一种 API,这意味着您可以在代码中使用它,从 Java 代码中调用它的方法/接口来与数据库通信、获取所需的数据、对其进行更新等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
相关资源
最近更新 更多