我有一个映射到所有请求的过滤器:
@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
答案 0 :(得分:1)
如果您使用的是JEE> = JEE 7,则有ServletContext.getServletRegistrations()
。它返回从servlet名称到ServletRegistration
对象的映射。它们具有getMappings()
方法,可为您提供该servlet的URL映射。您可能需要稍微处理一下这些内容,例如手动应用servlet URL映射规则,以查看将调用哪个servlet(如果有)。