我正在研究一个有效路由到其他servlet的servlet,在此过程中执行一些漂亮的帮助函数。我的web.xml配置为引导通过此类的所有流量,并且该类基于pathInfo和regex逻辑路由请求。我的代码如下所示:
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”。
我的正则表达不太强烈。有什么想法吗?
答案 0 :(得分:3)
正则表达式/.*/.*/?
不匹配"/foo"
。你的错误在其他地方(对不起!)。
见http://fiddle.re/0g28(点击蓝色“Java”)
答案 1 :(得分:0)
我已经在我的机器上进行了测试,第三次测试是返回true的 - 所以我同意Andrew Cooke - 这个错误在其他地方。