我正在研究一个可以有效地路由到其他servlet的servlet,并在此过程中执行一些漂亮的辅助功能。My 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"。
我的正则表达式不是太强。有什么想法吗?
则表达式/.*/.*/?
将不匹配"/foo"
。 您的错误在其他地方(对不起!
请参阅 http://fiddle.re/0g28(单击蓝色的"Java")
我已经在我的机器上进行了测试,第三个测试是返回 true 的测试——所以我同意安德鲁·库克的观点——这个错误在其他地方。