2014-09-13 58 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