正则表达式的Servlet映射

时间:2015-02-11 19:29:29

标签: java regex google-app-engine servlets restlet

我正试图找出一个让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,为什么会这样?

0 个答案:

没有答案