前端所有的请求都需要经过Servlet处理,包括请求静态资源html css jpg等(静态资源使用tomcat默认的servlet处理)
访问jsp会使用tomcat中自带的jspservlet处理,访问静态资源会使用tomcat中自带的defaultServelt处理的,这是一个缺省servlet, url匹配路径是 / ,优先级最低,在servlet中优先级排名为:
1.精确匹配
2.路径匹配 /
3.后缀名匹配 如.jsp .do
4./ 缺省(其他servle匹配不上的由此缺省servlet匹配)
所以在前端控制器 dispatcherServlet中,如果url写/*,会拦截到所有请求.包括controller要返回给视图解析器的 字符串jsp, 访问jsp又进入dispacherServlet,找不到对应的controller就会出现404.
如果url写 / ,jsp不会出现这个问题,但又会出现静态资源被拦截出现404的问题(因为静态资源的默认defaultServlet的url也是 /,被dispatcherServelt覆盖了,),所以需要在springmvc容器中配置一个tomcat默认的defaultServlet;此时为什么jsp不会被dispatcherServlet拦截?因为此时有tomcat的jspservlet处理,该servlet是匹配 *.jsp的.说到底还是servlet 中url优先级的问题