2014-09-13 103 views
3

我剛剛獲得了一個現有的GWT Web應用程序。此應用程序以非常標準的方式工作:它具有客戶端(瀏覽器)部分和服務器部分。它使用GWT-RPC與服務器通信,該服務器實現了RemoteServiceServlet。將Android客戶端添加到現有的GWT服務器

現在,我想要做的是實現一個Android客戶端,它重用當前GWT應用程序的服務器部分。 Android客戶端不需要具有當前瀏覽器客戶端的全部功能。我只是想在不修改的情況下重用現有服務器,以便瀏覽器和Android客戶端都可以使用相同的服務器實現。我對GWT很新。你會在這種情況下做什麼?你會只是從Android應用程序發送HTTP請求到servlet服務器,還是有更好的方法來做到這一點?

謝謝!

回答

0

我建議使用GWT-RPC機制服務器和什麼不GWT之間進行通信。原因是,GWT-RPC屏蔽了溝通的細節。它的內部可能會隨着你使用的GWT版本而改變。

您應該使用什麼取決於服務器應用程序和您的客戶端的體系結構。

你可以嘗試的是用其他servlet封裝GWT servlet,以通用格式(例如XML或JSON)提供數據。這樣,你獨立於GWT-RPC內部,你不必修改現有的代碼(包裝器servlet可以放在另一個只引用現有GWT-RPC服務器項目的項目中)。

下面是一個例子:

一個GWT-RPC的Servlet:

public class MyGwtServiceImpl extends RemoteServiceServlet implements MyGwtService { 
     // Method delivering my task list to GWT client 
     @Override 
     public List<Task> getTaskList(final String clientId) { 
      // Get task list ... 
      return result; 
     } 
    } 
} 

現在你可以換這個servlet返回JSON或XML:

public class MyJsonServlet extends MyGwtServiceImpl { 
    @Override 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) { 
     List<Task> result = super.getTaskList(req.getParameter("clientId")); 
     // Serialize result to JSON and write to OutputStream 
    } 
} 
+0

如果我得到這個權利,然後我只需編寫一些GWT Servlet,可以在一般情況下訪問服務器上的數據,並將我需要的servlet包裝到一個'Facade'中,該Facade提供了我的Android客戶端需要的功能**另外還有** ty,這是否正確?這聽起來很有趣,因爲目前我爲移動客戶端提供第二個REST API,而不是重用GWT servlet的功能。 – displayname 2015-08-26 09:13:26

+0

我上面寫了一個例子。是的,你也可以在包裝servlet中添加額外的功能。 – Bob 2015-08-26 09:27:22

+0

好的!這很好知道!謝謝 :) – displayname 2015-08-26 21:51:01