-1

私は、他のサーブレットに効果的にルーティングするサーブレットに取り組んでおり、途中で気の利いたヘルパー機能を実行しています。私の 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がヒットし_fooBarHandlerhttp://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

私は自分のマシンでテストを実行しましたが、3 番目のテストで true が返されました。そのため、Andrew Cooke に同意します。バグは別の場所にあります。

于 2012-05-25T19:20:32.207 に答える