Java URL非迭代匹配

Java URL非迭代匹配,java,tomcat,pattern-matching,uri,Java,Tomcat,Pattern Matching,Uri,我有http路径和方法的列表。例: GET /spaceshuttles/{id} POST /{version}/order 据我所知,当有一个传入的请求时,这些路径会进行迭代比较,在第一次匹配时停止。 我的问题是——这会影响性能吗?如果有一个处理1000条传入路由的服务,性能会受到多大的影响 即使点击率很小,是否有一个干净的策略将URL与树/trie类匹配策略相匹配?如果是,那怎么办? 例如: 我希望将传入的URL与其中一个进行匹配,而无需迭代进行匹配。 例如:对于GET/spaceshu

我有http路径和方法的列表。例:

GET /spaceshuttles/{id}
POST /{version}/order
据我所知,当有一个传入的请求时,这些路径会进行迭代比较,在第一次匹配时停止。 我的问题是——这会影响性能吗?如果有一个处理1000条传入路由的服务,性能会受到多大的影响

即使点击率很小,是否有一个干净的策略将URL与树/trie类匹配策略相匹配?如果是,那怎么办? 例如: 我希望将传入的URL与其中一个进行匹配,而无需迭代进行匹配。 例如:对于GET/spaceshuttles/46我应该获得GET/spaceshuttles/{id}

我需要为我的网页应用过滤器,其中一些网址得到特殊待遇。
目前,我正在对列表进行迭代匹配。我假设已经有一些库以一种高效的方式实现了这一点。

我没有一个库可以满足您的需要。我会选择一个自定义类
RequestMatcher
,其中包含一个regexp模式和一个Http方法或带有Http方法的字符串:

class RequestMatcher {
    private Pattern urlPattern;
    private String httpMethod;

   public RequestMatcher(final String urlPattern, final String httpMethod) {
        this.urlPattern = Pattern.compile(urlPattern);
        this.httpMethod = httpMethod;
    }

    public boolean matches(final String url, final String httpMethod) {
        return httpMethod.equals(this.httpMethod) && this.urlPattern.matcher(url).matches();
    }
在过滤器中,您可以这样使用它:

final RequestMatcher spaceShuttleMatcher = new RequestMatcher("/spaceshuttles/[0-9]+", "GET");
final RequestMatcher orderMatcher = new RequestMatcher("/[0-9]+\\.[0-9]+\\.[0-9]+/order", "POST");
boolean isSpaceShuttleRequest = spaceShuttleMatcher.matches("/spaceshuttles/123", "GET");
boolean isOrderMatcher = orderMatcher.matches("/1.2.3/order", "POST");