如何检查请求的URL是否是servlet(在过滤器中)?

时间:2018-11-13 17:39:11

标签: java servlets java-ee

我有一个映射到所有请求的过滤器:

@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

1 个答案:

答案 0 :(得分:1)

如果您使用的是JEE> = JEE 7,则有ServletContext.getServletRegistrations()。它返回从servlet名称到ServletRegistration对象的映射。它们具有getMappings()方法,可为您提供该servlet的URL映射。您可能需要稍微处理一下这些内容,例如手动应用servlet URL映射规则,以查看将调用哪个servlet(如果有)。