我有一个映射到所有请求的过滤器:
@WebFilter({ "/*" })
我使用这个过滤器进行 url 映射,以便我可以为我的 jsps 提供虚荣 url 并处理 404,但这也意味着我必须手动添加 servlet 才能正常处理请求链:
String requri = ((HttpServletRequest) request).getRequestURI(); //get requested url
String page = "";
if(requri.equals("/contact/") || requri.equals("/contact"))
page = "contact.jsp";
else if(requri.equals("/about/") || requri.equals("/about"))
page = "about.jsp";
else if(requri.equals("/SomeServlet"))
chain.doFilter(request, response); //if requested url is a servlet, then carry on normally
//send requested url to servlet which will then forward user to the appropriate page
request.getRequestDispatcher("/GetPage?page="+page).forward(request, response);
return;
一切都很好。
但是有没有办法获取所有 servlet 的 url 映射列表?这样我就不必手动列出 servlet 的每个 url 映射..即:
else if(requri.equals("/SomeServlet") || requri.equals("/AnotherServlet") || requri.equals("/SomeOtherServlet"))
chain.doFilter(request, response); //if requested url is a servlet, then carry on normally
理想:
else if(isAServlet(requri))
chain.doFilter(request, response); //if requested url is a servlet, then carry on normally
最佳答案
如果您使用的是 JEE >= JEE 7,则有 ServletContext.getServletRegistrations()
。它返回从 servlet 名称到 ServletRegistration 对象的映射。这些有一个 getMappings()
获取该 servlet 的 URL 映射的方法。您可能需要稍微处理一下这些,例如手动应用 servlet URL 映射规则,以查看将调用哪个 servlet(如果有)。
关于java - 如何检查请求的 URL 是否是 servlet(在过滤器中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53286677/