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

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

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

谢谢!

【问题讨论】:

    标签: java android gwt


    【解决方案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 中添加其他功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多