将 Android 客户端添加到现有 GWT 服务器

Posted

技术标签:

【中文标题】将 Android 客户端添加到现有 GWT 服务器【英文标题】:Add Android client to existing GWT server 【发布时间】:2014-09-13 13:09:34 【问题描述】:

我刚刚获得了一个现有的 GWT Web 应用程序。这个应用程序以非常标准的方式工作:它有一个客户端(浏览器)部分和一个服务器部分。它使用 GWT-RPC 与实现 RemoteServiceServlet 的服务器进行通信。

现在,我想做的是实现一个 android 客户端,它重用当前 GWT 应用程序的服务器部分。 Android 客户端不需要具备当前浏览器客户端的全部功能。我只想在不修改的情况下重用现有的服务器,以便浏览器和Android客户端都可以使用相同的服务器实现。我对 GWT 很陌生。在这种情况下你会怎么做?您会直接从 Android 应用程序向 servlet 服务器发送 HTTP 请求,还是有更好的方法?

谢谢!

【问题讨论】:

【参考方案1】:

我建议不要使用 GWT-RPC 机制在服务器和任何非 GWT 之间进行通信。原因是,GWT-RPC 屏蔽了通信的细节。它的内部结构可能会随着您使用的 GWT 版本而改变。

您应该使用什么取决于服务器应用程序和您的客户端的体系结构。

您可以尝试将 GWT servlet 与其他 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
    

【讨论】:

如果我做对了,那么我可以编写一些 GWT Servlet 来提供对服务器上我的数据的一般访问权限,然后将我需要的 servlet 包装到提供功能的Facade 中我的 android 客户端需要 plus 附加功能,对吗?这听起来很有趣,因为目前我为移动客户端提供了第二个 REST API,而不是重用 GWT servlet 的功能。 我在上面写了一个例子。是的,您还可以在包装 servlet 中添加其他功能。

以上是关于将 Android 客户端添加到现有 GWT 服务器的主要内容,如果未能解决你的问题,请参考以下文章

为 GWT 应用程序传递查询字符串

如何将 URL 参数从 GWT 客户端发送到服务器端进行验证

LibGDX - 将跨平台客户端连接到服务器(HTML5/GWT、iOS、Android 和桌面)

GWT - Hibernate:如何将 MySQL 的结果显示到 GWT 客户端

GWT 保持同步客户端和服务器模型

GWT - 将外部 java 类添加到客户端项目