我正试图找出一个让Guice的Restlet应用程序成为serve
的方法。
我的代码如下所示:
public class GuiceServletModule extends ServletModule {
@Override
protected void configureServlets() {
bind(RemoteApiServlet.class).in(Scopes.SINGLETON);
bind(ServerServlet.class).in(Scopes.SINGLETON);
serve("/_ah/remote_api").with(RemoteApiServlet.class);
// serveRegex("^((?!_ah).)*$").with(ServerServlet.class, map("org.restlet.application", "com.mycompany.MyRestletApplication"));
serve("/*").with(ServerServlet.class, map("org.restlet.application", "com.mycompany.MyRestletApplication"));
}
private static Map<String,String> map(String... params) {
Preconditions.checkArgument(params.length % 2 == 0, "You have to have a n even number of map params");
Map<String,String> map = Maps.newHashMap();
for (int i = 0; i < params.length; i+=2) {
map.put(params[i], params[i+1]);
}
return map;
}
}
为什么我要这样做?原因是MyRestletApplication
有ROOT /
和/rest/
的路由,所以明显使用 web.xml 通过以下方式提供MyRestletApplication
:
<servlet-mapping>
<servlet-name>RestletServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
导致_ah/*
路径(GAE管理路径)无法访问或更精确地被RestletServlet捕获。例如。 /_ah/admin
不会有任何作用。因此,我正在努力做一些serveRegex
,以便Restlet不会捕获_ah/*
路径。
现在,在/*
中提供Restlet servlet使MyRestletApplication
正常工作。
但是像这样的正则表达式的服务器:serveRegex("^((?!_ah).)*$")
使MyRestletApplication
无效。
查看日志:
[INFO] 2015年2月12日上午3:47:45 org.restlet.engine.log.LogFilter afterHandle [INFO] INFO: 2015-02-12 03:47:45 127.0.0.1 127.0.0.1 8080 GET / rest / stuff - 404 - 0 77 http://localhost:8080 Mozilla / 5.0 (X11; Linux x86_64; rv:37.0)Gecko / 20100101 Firefox / 37.0 http://localhost:8080/
它在那里显示404,为什么会这样?