[ /* 和 / 的区别 ] Difference between / and /* in servlet mapping url pattern

一箫一剑平生意,负尽狂名十五年。这篇文章主要讲述[ /* 和 / 的区别 ] Difference between / and /* in servlet mapping url pattern相关的知识,希望能为你提供帮助。
< url-pattern> /*< /url-pattern>
The  /*  on a servlet overrides all other servlets,
including all servlets provided by the servletcontainer such as the default servlet and the JSP servlet. 
无论你发送什么请求,都会经过这个servlet.
【[ /* 和 / 的区别 ] Difference between / and /* in servlet mapping url pattern】通常来讲,只会用在Filter上,进行全部过滤.
It is able to let the request continue to any of the servlets listening on a more specific URL pattern by calling  FilterChain#doFilter().
< url-pattern> /< /url-pattern>
The  /  doesn‘t override any other servlet. 
它只替换servlet容器的内置默认servlet.
ps:默认servlet是为那些不匹配任何注册过的servlet准备的.
通常,它只会在静态资源上调用(CSS/JS/image/etc)和直接侦听.
servlet容器的内置servlet也有处理Http缓存请求,媒体流和文件下载的能力.
 
通常,你不会想要override默认的服务器.
不然你就不得不取代它的任务,这可不轻松.
因此,这对于servlet是一个不好的URL-pattern.
 
至于JSP页面为什么不会hit到这个servlet,是因为servlet容器的内置JSP servlet会被调用.
--已经被默认映射成更详细的RUL pattern *.jsp
 
< url-pattern> < /url-pattern>
然后,还有一个空字符串URL pattern.
当context root被请求时,它就会被调用.
这和< welcome-file> 途径是不同的,
它的子文件夹被请求时,它不会被调用.
 
这更像是你需要一个"主页servlet"时想要寻找的URL pattern.
空字符和/ URL pattern的定义和直观期待有所差距,很容易混淆.
 
Front Controller
In case you  actually  intend to have a front controller servlet, then you‘d best map it on a more specific URL pattern like  *.html*.do/pages/*/app/*, etc. You can hide away the front controller URL pattern and cover static resources on a common URL pattern like  /resources/*/static/*, etc with help of a servlet filter. See also  How to prevent static resources from being handled by front controller servlet which is mapped on /*. Noted should be that Spring MVC has a builtin static resource servlet, so that‘s why you could map its front controller on  /  if you configure a common URL pattern for static resources in Spring. See also  How to handle static content in Spring MVC?

    推荐阅读