-1

我正在开发一个 servlet,它可以有效地路由到其他 servlet,并在此过程中执行一些漂亮的辅助功能。我的 web.xml 配置为通过此类引导所有流量,并且该类基于 pathInfo 和正则表达式逻辑路由请求。我的代码如下所示:

public class API1 extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        String pathInfo = req.getPathInfo();

        if (pathInfo.matches("/.*/.*/.*/?")) {
            _fooBarBazHandler.get(req, resp);
        } else if (pathInfo.matches("/.*/.*/?")) {
            _fooBarHandler.get(req, resp);
        } else if (pathInfo.matches("/.*/?")) {
            _fooHandler.get(req, resp);
        } else {
            resp.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
    }
...
}

现在,我的想法是,如果我点击http://host/FooService/foo/bar/baz它,它会重定向到_fooBarBazHandlerhttp://host/FooService/foo/bar会点击_fooBarHandler,然后http://host/FooService/foo会点击_fooHandler

然而,出于某种原因,http://host/FooService/foo显然是匹配的_fooBarHandler。绝对清楚,使用调试器,我确定 的值为pathInfo“/foo”。

我的正则表达式不是太强。有任何想法吗?

4

2 回答 2

3

正则表达式/.*/.*/?匹配"/foo"。您的错误在其他地方(对不起!)。

http://fiddle.re/0g28(点击蓝色的“Java”)

于 2012-05-25T18:53:25.380 回答
0

我已经在我的机器上进行了测试,第三个测试是返回 true 的——所以我同意 Andrew Cooke 的观点——这个错误在其他地方。

于 2012-05-25T19:20:32.207 回答