在web.xml中<servlet-mapping>和<filter-mapping>都有<url-pattern>配置项,它们的作用都是匹配一次请求是否会执行这个Servlet或Filter。
url-pattern配置验证 在web.xml加载时,会首先检查<url-pattern>配置是否符合规则,这个检查是在StandardContext的validateURLPattern方法中检查的;如果检查不成功,Context容器启动会失败,并且报java.lang.IllegalArgumentException:Invalid<url-pattern> ... ... in Servlet mapping错误。
url-pattern匹配规则 匹配规则有三种:
<url-pattern>的其他写法,如/foo/ ,/*.htm ,*/foo 都是不对的。
Servlet的匹配原则Servlet的匹配规则在prg.apache.tomcat.util.http.mapper.Mapper.internalMapWrapper中定义。 对Servlet的匹配来说,如果同时定义了多个<url-pattern>,那么到底匹配哪个Servlet?这个匹配顺序是:
注: 对于如下设置: [html] view plaincopy
"/" 的设置将会将当前指定的 servlet 设为web应用的默认servlet,原来web容器的默认servlet将被覆盖。 参见: web容器的默认servlet 和 spring dispatcherservlet 设置 一节
Filter的匹配原则Filter的匹配规则定义在AppplicationFilterFactory,matchFiltersURL方法中定义。 Filter的匹配原则和Servlet有些不同,只要匹配成功,这些Filter都会在请求链上被调用。 |
|