一个请求和多个servlet-mapping匹配,会去执行哪个servlet???

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个请求和多个servlet-mapping匹配,会去执行哪个servlet???相关的知识,希望对你有一定的参考价值。

就是有多个servlet-mapping都能匹配到这个请求,会去执行哪个servlet???

针对同一个匹配的url ,只会保留web.xml文件中定义的最后一个可匹配的

servlet-mapping处理

---tomcat的处理中的相关源码:StandardContext.java

/**
* Add a new servlet mapping, replacing any existing mapping for
* the specified pattern.
*
* @param pattern URL pattern to be mapped
* @param name Name of the corresponding servlet to execute
* @param jspWildCard true if name identifies the JspServlet
* and pattern contains a wildcard; false otherwise
*
* @exception IllegalArgumentException if the specified servlet name
*  is not known to this Context
*/
public void addServletMapping(String pattern, String name,
boolean jspWildCard) 
// Validate the proposed mapping
if (findChild(name) == null)
throw new IllegalArgumentException
(sm.getString("standardContext.servletMap.name", name));
pattern = adjustURLPattern(RequestUtil.URLDecode(pattern));
if (!validateURLPattern(pattern))
throw new IllegalArgumentException
(sm.getString("standardContext.servletMap.pattern", pattern));
// Add this mapping to our registered set
synchronized (servletMappings) 
String name2 = (String) servletMappings.get(pattern);
if (name2 != null) 
// Don't allow more than one servlet on the same pattern   -----看这里的处理
Wrapper wrapper = (Wrapper) findChild(name2);
wrapper.removeMapping(pattern);
mapper.removeWrapper(pattern);

servletMappings.put(pattern, name);

Wrapper wrapper = (Wrapper) findChild(name);
wrapper.addMapping(pattern);
// Update context mapper
mapper.addWrapper(pattern, wrapper, jspWildCard);
fireContainerEvent("addServletMapping", pattern);

参考技术A 不同的pattern可以映射到同一个servlet,但同一个pattern不能映射到不同的servlet。

首先,servlet-mapping元素在servlet元素之后才能配置。
接下来,根据你请求<url-pattern>路径去访问。
参考技术B 不会报错吗???

以上是关于一个请求和多个servlet-mapping匹配,会去执行哪个servlet???的主要内容,如果未能解决你的问题,请参考以下文章

详解servlet的url-pattern匹配规则.RP

Servlet开发 | 利用 Filter + 反射 处理 URL, 精简 servlet-mapping

Nginx Location匹配顺序

WebApi 找到了与该请求匹配的多个操作

Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException:请求匹配多个端点

laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?