url-pattern工作原理剖析

名词解释:

小web.xml:自己项目下配置的web.xml。
大web.xml:tomcat服务器下的web.xml。

举例分析

  • url-pattern=/
    url-pattern工作原理剖析_第1张图片
    1、这是SpringMVC的前端控制器的配置,然而这样写的效果是什么呢?
    2、效果是:拦截请求后缀为 *.jsp 以外的其他请求。
    3、分析:处理请求是tomcat做的事,所有项目的web.xml都是继承于Tomcat的大web.xml。
    4、我们先来看一下Tomcat下的web.xml是如何配置的:
    url-pattern工作原理剖析_第2张图片
    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的请求。

一张图总结

url-pattern工作原理剖析_第3张图片

以上是我的一些总结,如有不妥的地方,还请纠正,谢谢。

你可能感兴趣的:(SpringMVC)