2016-03-05 98 views
1

我們將創建一個客戶端 - 服務器端應用程序,客戶端最初被要求爲桌面應用程序。我們沒有使用Java創建這些應用程序的經驗,但我們已經開始思考我們將要使用的工具。如何從客戶端桌面應用程序請求服務器端的Spring應用程序?

例如,我們決定使用Spring作爲接收請求,處理它們的框架,最終從數據庫(MySQL)中獲取數據,然後返回響應。

我不確定這些響應(以及來自客戶端應用程序的請求)的格式是什麼,但它應該儘可能與客戶端獨立,以便客戶如果更改意見,並決定他/她想要一個網絡或移動應用程序,我們不需要更改處理所有請求的服務器端代碼。

通過查看一個項目的源代碼,我們中的一個人已經有了一些這方面的經驗,顯然他使用了HttpServletRequestHttpServletResponse對象作爲控制器所有方法的參數。我認爲這是一個服務器端的Spring應用程序。在這種情況下,具體來說,它將是一個控制器類,它處理對某個URL的請求。

該代碼更容易理解,因爲它與我以前使用JavaScript,Node,Express和Mongo的方式類似。它都基於MVC模式。在該環境中,請求通過在瀏覽器上編寫URL或使用XMLHttpRequest(AJAX)進行。

現在,我的疑惑和問題是:

  1. 如果我們真的需要創建一個桌面應用程序,例如與Swing,我們怎麼辦請求到春節控制器?

  2. 將服務器端代碼與客戶端代碼分離的最佳方式是什麼? JSON在這裏有用嗎?如果是的話,它會被粗略地使用嗎?

  3. 我們是否應該在客戶端也使用一個框架,這個框架在需要的時候向Spring控制器發出請求的具體工作,或者它足以以某種方式硬編碼請求?這個框架最終如何處理Swing?

  4. JDBC在哪裏適合?我想在服務器端代碼中。但是,我們應該什麼時候使用它?

對不起,這些是很多問題,但我們之前沒有介紹到這些環境中,所以我們不知何故丟失了。

+0

您可以使用https://hc.apache.org/httpcomponents-client-ga/在客戶端網站上進行請求。只需將您的請求序列化爲JSON,發送它即可提供服務,並對JSON進行非序列化,這將來自服務器。 –

回答

1

如果您要在服務器端使用Spring MVC和REST控制器,您需要一個REST客戶端庫,它將HTTP請求發送到您的後端。它不一定需要以任何方式連接到Spring。

  1. 您可以從this answer檢查REST客戶端,並選擇一個你喜歡的。 UniRest可能是桌面應用程序的不錯選擇。

  2. 解耦是通過提供Restful API來完成的,意味着任何可以發送HTTP請求的客戶端都可以使用您的後端服務。您可以使用任何編程語言編寫您的客戶端應用程序(您的案例中的桌面應用程序)以及任何您需要的框架。通信是通過HTTP完成的,這是一個很好的解耦例子(與RMI不同)。 是的,JSON可能是一個不錯的選擇,其餘大部分API使用JSON作爲數據交換格式。但你不需要,你可以使用XML或任何其他格式(但我強烈推薦JSON和傑克遜作爲圖書館)

  3. 你也可以按照你的客戶端應用程序的MVC方法,但它取決於你使用的框架等,但基本上你需要的僅僅是發送請求到後端,你可以以任何你想要的方式來完成。爲了有一個很好的結構,你可以將數據端點隱藏在接口後面,接口的具體實現會調用後端並提供數據。您還可以將端點URL外部化爲配置文件,以保持組織良好的結構。或者,如果這只是一個簡單的項目,那麼是的,你可以硬編碼並且一切都是內聯的。這完全取決於你。

  4. 在Java中,JDBC只是用來連接數據庫。因此,如果您沒有(關係型)數據庫,則根本不需要它。既然你提到你會使用MySQL,你需要在服務器端。只需獲取MySQL JDBC驅動程序(如果您使用Maven從here獲得依賴關係),那麼它就是用於MySQL連接的JDBC API的實現。

而最後一件事:不是使用舊&過時的搖擺,可以考慮使用JavaFX。這是在Java中進行桌面應用用戶界面的新的首選方式。

+0

第3點。「您也可以在您的客戶端應用程序中使用MVC方法,但它取決於您使用的框架等。通過我們使用的框架,你指的是我們在客戶端使用哪個REST庫,或者是什麼?或者,如果不是,哪些框架可以讓我在客戶端建立MVC方法?或者完全是這個休息庫? – nbro

+0

您能否澄清一般情況下更好的第3點(如果您有時間並且願意:)?我想我不明白你在說什麼...... – nbro

+0

要點4.更有經驗的隊友建議使用MySQLWorkbench來處理數據庫。那麼爲什麼我們現在需要JDBC呢?或者,如果我們仍然需要它,那麼它適合哪裏? – nbro

相關問題