私は、他のサーブレットに効果的にルーティングするサーブレットに取り組んでおり、途中で気の利いたヘルパー機能を実行しています。私の 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
すると にリダイレクトされ_fooBarBazHandler
、http://host/FooService/foo/bar
がヒットし_fooBarHandler
、http://host/FooService/foo
がヒットするということです_fooHandler
しかし、何らかの理由でhttp://host/FooService/foo
が に一致しているよう_fooBarHandler
です。完全に明確にするために、デバッガーを使用して、の値pathInfo
が「/ foo」であることを確認しました。
私の正規表現はあまり強力ではありません。何か案は?