servletfilter如何识别下一个目标是另一个filter还是servlet / jsp?

我们通常最终在web.xml中为servlet中的任何Filter编写/*

  requestRedirectorFilter /action `. 

现在我的疑问是java如何识别下一个servlet / jsp是哪个? 因为我们通过任何要求

 request.getRequestDispatcher("/ABCXYZ").forward(request, (HttpServletResponse)servletResponse); 

要在下一个servlet / jsp上导航,默认情况下容器将在web.xml中搜索。 在web.xml中, /*已经存在于我们使用的filter中。 究竟这里的实际问题就开始了。

如果/* [其作用类似于任何请求的通用接收器]已存在于web.xml中,那么heck容器如何知道如何跟随/ABCXYZ而不是/* ? 请在这方面分享您的观点和知识。

Servlet匹配程序

请求可以匹配给定上下文中的多个servlet映射。 servlet容器使用简单的匹配过程来确定最佳匹配。

匹配过程有四个简单的规则。

  • 首先,容器更喜欢通配符路径匹配的精确路径匹配。

  • 其次,容器更喜欢匹配最长的图案

  • 第三,容器优先于文件类型匹配的路径匹配。

  • 最后,模式/始终匹配任何其他模式不匹配的请求。


例如,上下文web.xml文件可以将在线目录的主页映射到一个模式,将目录的搜索页面映射到不同的模式,如下所示:

  catalogBrowse /Catalog/*   catalogSearch /Catalog/search/*  

下图说明了上下文的匹配过程。 由于容器更喜欢匹配最长的模式 ,因此包含/Catalog/search/的URL始终与catalogSearch的映射匹配,而不是与catalogBrowse的映射匹配。

URL模式匹配

在此处输入图像描述


如果您不想转到该链接,则会从以下链接复制。

请查看URL模式 ,其中详细介绍了示例。