我使用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中绑定一行。
答案 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融为一体。