使用Restet与Guice DI& GWT

时间:2013-10-03 13:22:44

标签: java rest gwt guice restlet

我使用GWT-RPC和Guice设置了一个相当简单的GWT应用程序。目前我正在提供两件事,GWT-RPC服务和一个接受上传的applet。它看起来像这样:

public class MyGuiceModule extends ServletModule {
@Override
protected void configureServlets() {
        serve("/path/to/service").with(MyGWTServiceImpl.class);
        serve("/path/to/upload").with(MyUploadServlet.class);
        //bunch of bindings follow...
    }
}

我希望能够从同一个应用程序提供restlet资源或restlet应用程序,并在我的guice模块而不是web.xml中配置它们。以前我使用Restlet设置REST支持的GWT应用程序,但它没有使用DI,所以我有点迷失这应该如何工作。

eta:这是我的web.xml

  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
      "http://java.sun.com/dtd/web-app_2_3.dtd">

  <web-app>

    <filter>
      <filter-name>guiceFilter</filter-name>
      <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
    </filter>

    <filter-mapping>
      <filter-name>guiceFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
      <listener-class>com.whatever.MyGuiceBootstrap</listener-class>
    </listener>

    <!-- Default page to serve -->
    <welcome-file-list>
      <welcome-file>home.html</welcome-file>
    </welcome-file-list>

  </web-app>

更新

这解决了这个问题,欢呼!

    bind(ServerServlet.class).in(Singleton.class);
    Map<String,String> initParams = new HashMap<String,String>();
    initParams.put("org.restlet.application", "path.to.your.RestletApplication");
    serve("/api/*").with(ServerServlet.class,initParams);

UPDATE2

最后选择了我从http://hpehl.info/google-appengine-restlet-guice.html改编的解决方案,它允许我在我的资源中使用注入,并在guicemodule中绑定一行。

2 个答案:

答案 0 :(得分:1)

Restlet提供Restlet - &gt;具有org.restlet.ext.servlet.ServerServlet类的Servlet适配器。您应该将其绑定到所需的路径,并让它知道Application的名称,如下所示:

serve("/api/*").with(ServerServlet.class);
getServletContext().setAttribute(
    "org.restlet.application", "com.you.MyApplication");

com.you.MyApplication应该替换为org.restlet.Application类的实际实现。

答案 1 :(得分:0)

好吧,我想你添加旧的web.xml。但这应该可以解决你的问题。

serve("/api/*").with(ApiServlet.class);

如果您没有使用普通的Servlet作为REST api的实现,那将会有点棘手。泽西岛也可以与Guice融为一体。