SpringMVC配置前端控制器的路径问题

在使用SpringMVC时,都须要在web.xml中配置一个前端控制器DispatcherServlethtml

控制器是一个servlet,但这个路径配置就有不少种,以前都是以扩展名配置的路径,如*.do,而后再项目中就就*.do的路径进行访问。前端

但最近的项目遵循Restful风格,配置的路径以下web

 

能够看到配置的路径为“/”,因为以前疑惑上网查,说是/*和/都是拦截全部请求,因而把这里的路径改为/*,以后项目就出先了404资源找不到的问题。jsp

经过后来查阅资料,以本身的理解  /* 和 / 的区别以下spa

  首先咱们了解一下servlet的匹配规则3d

    精度匹配>路径匹配>扩展名匹配>内省匹配 (这里具体就不举例了,想了解的同窗能够自行百度)code

    全部这里的  /属于内省匹配模式(TomCat默认有一个这样的路径),/*属于路径匹配。因此当控制器返回一个结果视图访问时,若是配置的为/*.则SrpingMVC会再次拦截,但因为找不到相关的控制器,就会报404资源找不到。xml

    若是这里配置的为 / ,首先会覆盖掉Tomcat中默认的,Tomcat默认的是用来处理静态资源的,好比html,jsp等一些静态资源。这里覆盖掉之后,咱们就要本身考虑静态资源的处理了。htm

    

  其次我发如今web.xml中又配置了这样一些路径,因为以前覆盖掉了Tomcat默认的,这里应该是将一些静态资源手动调用Tomcat的默认处理器进行处理,可是在这里面咱们没有发现jsp页面,那么控制器返回的jsp仍是会被 / 拦截进入到SpringMVC中。blog

  因此为了防止资源找不到报404,在SpringMVC的配置文件中配置了以下的配置信息

 

首先的做用是对进入到SpringMVC的静态资源进行处理,功能同Tomcat默认的DefaultServlet功能相似

其次这个的做用是当进入到SpringMVC中而且路径为 / 时,默认跳转到/index.html界面,这貌似就是跳转主页功能。

最后 是SpringMVC提供处理静态资源的,详细用法自行百度。

 

有个疑惑,假如我访问一个js文件,web.xml里面配置了*.js交给Tomcat处理(扩展名匹配),DispatcherServlet又配置的是‘/’  (内省匹配),而扩展名优先级大于内省,因此说当我访问一个JS静态资源时,是不会进入SpringMVC中的,但这里又在SpringMVC中配置了一些静态资源的处理,不知道有什么用???

 

总结:

  1./*和/均可以拦截全部请求,可是优先级不同,/*的优先级要高于/,这也是为何配置/*会报资源找不到的问题,由于根本到达不了Tomcat默认的Servlet来处理静态资源。

  2.网上说的/*拦截扩展名的,/不会拦截带扩展名的,我以为这总说法是不对的。仍是要理解servlet的匹配规则。

相关文章
相关标签/搜索