【问题标题】:GWT and GAE: How to link RequestFactory server code with Servlets?GWT 和 GAE:如何将 RequestFactory 服务器代码与 Servlet 链接?
【发布时间】:2012-10-30 11:22:03
【问题描述】:

我正在尝试弄清楚如何将 GWT 应用程序部署到 Google App Engine。从this page on using JSPs 看来,GAE 期待一个普通的、基于HttpServlet 的网络应用程序,带有典型的处理程序:

public class MyServlet extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse resp) {
        // Handle the HTTP request here and return a response
    }
}

在阅读了 GWT 文档并观看了几个 Google I/O 视频之后,我确信我想使用 GWT 的 RequestFactory 选项而不是传统的 GWT-RPC 方法进行客户端-服务器通信。

在研究如何使用RequestFactory 的示例时,我发现this simple example 提出了以下类架构:

Client-Side:
    PizzaProxy - client-side proxy for Pizza.class
    PizzaRequestFactory - RF impl
    PizzaRequestContext - RF context impl

Server-Side:
    Pizza - the entity
    PizzaDao - DAO for entity
    DaoLocator - ServiceLocator for all DAOs
    PizzaLocator - Locator for entity

首先,我会说看到这样规范化的代码让我有点惊讶,但是如果它在性能上得到回报或者只是提供良好的旧的通常的好处,请不要介意每个实体的这种架构老式的干净代码。

最重要的是,我没有看到 GAE 想要的和 RequestFactory 似乎提供的(在服务器端)之间的联系。 换句话说,我看到了一个例子RequestFactory 服务器端代码没有任何类型的 HttpServlet

所以我问:我如何“连接”这两个(RequestFactoryHttpServlet)概念,以便 GWT 客户端应用程序可以将 HTTP/S 发送到 servlet 驱动的 GAE 后端?有没有办法保留上面“Pizza App”中提出的架构,或者在部署到 GAE 时需要不同的架构/方法?

事实上,仔细想想,这个问题不仅适用于 GAE,还适用于任何标准的 Java Web 容器:Tomcat、JBoss、Jetty...

更新:我刚刚找到了GWT's Request Framework 的代码示例,看起来这可能就是我要找的。但是,这似乎与RequestFactory 没有任何关系,所以我有点困惑/担心,如果我使用该链接中的课程,我将失去RequestFactory 带来的好处。

【问题讨论】:

    标签: java google-app-engine gwt servlets requestfactory


    【解决方案1】:

    您必须将RequestFactoryServlet 默认映射为/gwtRequest(这是客户端DefaultRequestTransport 中的默认设置)。其他一切都是通过反射完成的。

    参见http://blog.ltgt.net/gwt-211-requestfactory/(这是关于 GWT 2.1.1;RF 在 GWT 2.4 中发生了很大变化,但总体思路仍然相同)

    【讨论】:

    • 感谢@Thomas Broyer (+1) - 所以在web.xml 中,我将/gwtRequest URL 映射到RequestFactoryServlet。但是,如果我有 20 个不同的请求,这些请求通常会发送到不同的 URL 并由服务器上的 20 个不同的处理程序处理,该怎么办? RequestFactoryServlet 有没有办法像 DispatcherServlet 一样工作并将请求路由到其他处理程序?
    • RequestFactoryServlet 调度器:它将请求路由到您的服务(由@Service 和/或@ServiceName 指向您的RequestContext
    • 太酷了!但是,如果我想在服务器端做一些 nifty 的事情,比如检查 HTTP 标头,或者将传入请求添加到线程池,以便同一个处理程序可以并发并同时处理多个请求,该怎么办?时间(应用引擎目前允许在前端实例上最多 10 个)。 所有这些代码会去哪里,在服务中?再次感谢@Thomas Broyer!
    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多