url-pattern工作原理剖析
名词解释:
小web.xml:自己项目下配置的web.xml。
大web.xml:tomcat服务器下的web.xml。
举例分析
-
url-pattern=/
1、这是SpringMVC的前端控制器的配置,然而这样写的效果是什么呢?
2、效果是:拦截请求后缀为 *.jsp 以外的其他请求。
3、分析:处理请求是tomcat做的事,所有项目的web.xml都是继承于Tomcat的大web.xml。
4、我们先来看一下Tomcat下的web.xml是如何配置的:
5、也就是说如果你在自己项目中不配置前端控制器,Tomcat将拦截所有请求。
6、重点:
而本例中我们配置的url-pattern=/,子类(小web.xml)重写父类(大web.xml)的方法,因此我们的前端控制器将会拦截诸如
/hello,/hello/index.html等后缀的请求。
而此时我们的前端控制器不会拦截.jsp的请求的原因是:大web.xml中还有一个url-pattern=*.jsp的方法,该方法没有被小web.xml重写,
因此Tomcat将会拦截.jsp为后缀的请求并进行处理。
- url-pattern=/*
1、 小web.xml中配置这种路径匹配将会重写大web.xml中的两个路径匹配控制器,因此服务器将不再处理这些请求,这种路径配置一般有风险,因此常用作过滤器的路径匹配,而不用于控制器的路径匹配。
2、常用作过滤器路径匹配的原因,因为过滤器将会在处理完这些请求后放行给到下一个过滤器处理,直到FilterChain中的所有过滤器过滤完毕。
3、而控制器不同于过滤器,控制器即控制器拦截到请求后将不再放行,而是直接进行处理。
-
url-pattern=*.action 、 *.js 等(拓展名匹配)
这种名为拓展名匹配,相当于在自己的小web.xml写自己的方法,拦截后缀为.action 、.js的请求。
一张图总结
以上是我的一些总结,如有不妥的地方,还请纠正,谢谢。