一个请求和多个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开发 | 利用 Filter + 反射 处理 URL, 精简 servlet-mapping
Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException:请求匹配多个端点