java - 如何检查请求的 URL 是否是 servlet(在过滤器中)?
问题描述
我有一个映射到所有请求的过滤器:
@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()
. ServletRegistration
它返回一个从 servlet 名称到对象的映射。它们有一个getMappings()
方法可以为您获取该 servlet 的 URL 映射。您可能需要对这些进行一些处理,例如手动应用 servlet URL 映射规则,以查看哪个 servlet(如果有)将被调用。
推荐阅读
- c# - 在 Restsharp 中发出调用请求 Etsy API
- swift - DidDeselect 屏幕外的单元格
- ubuntu - 联系 Parsoid/RESTBase 服务器时出错:(curl 错误:28)已达到超时
- swift - 如何获取firebase云数据库中的字段值?
- python - 正则表达式 Pyhon:不能用“$1”替换换行符
- amazon-web-services - 提供带有过期但无服务器的静态 HTML 页面 + 资产
- ffmpeg - 从具有单声道和缩混的文件中提取具有 5.1 音频的 PRORES 视频
- node.js - 使用 NodeJs 在 Pdftron 中导入多个注释
- apache-kafka - kafka FileStreamSourceConnector 将 avro 文件写入带有关键字段的主题
- html - 我正在尝试使用 R 在 ESPN 的密码保护站点后面进行 Webscrape