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

标签 java servlets jakarta-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

最佳答案

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

关于java - 如何检查请求的 URL 是否是 servlet(在过滤器中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53286677/

相关文章:

java - 配置 Spring Security 时遇到问题

java - 无法使用 spring WebClient : always 400 POST 请求

java - 如何在 Android 中处理 ConcurrentModificationException

java - 在 java servlet 中嵌入 Apache fop 2.1

java - 清除内存缓存 AppEngine 不起作用

java - 如何高效获取结果的最后一个值

java - Eclipse 上的 Gradle,钻石运算符无法识别?

java - 带有 java servlet 的 Angular 4 http CORS No 'Access-Control-Allow-Origin'

java - Jersey 资源 .class 加载

java - Spring 资源映射不适用于 localhost