Spring Boot 无法访问静态资源-404

  我自己在做Spring Boot的demo时发现根据官方提供的处理静态文件的方法,并不能够顺利访问静态资源。

  原因是我在Controller的方法中@RequestMapping()没有指定任何参数,而导致的默认拦截所有请求。(当初是不想看到404才这样写的,说是所有请求有点不准确,是发出的请求如果在其它的@ReqestMapping()中没有找到,就跳到这个没有指定任何参数的@RequestMapping()修饰的方法中)。

  但是为什么会影响到静态资源的访问呢?是因为Spring MVC
在处理请求时如何判断到底是想发出请求动作还是要获取静态资源呢?这涉及到HandlerMapping的执行顺序问题:

DefaultAnnotationHandlerMapping的order属性值是:0
<mvc:resources/>自动注册的SimpleUrlHandlerMapping的order属性值是:2147483646
<mvc:default-servlet-handler/>自动注册的SimpleUrlHandlerMapping的order属性值是:2147483647
Spring会先执行order值比较小的。当访问一个a.jpg图片文件时,先通过DefaultAnnotationHandlerMapping来找处理器,一定是找不到的,我们没有叫a.jpg的Action。再按order值升序找,由于最后一个SimpleUrlHandlerMapping是匹"/**"的,所以一定会匹配上,再响应图片。
参考链接:http://www.imooc.com/article/9241 其中有访问Spring Boot访问静态资源的几种方式

  由上可知所有请求在没有被显式声明的情况下都会进入这个没有指定任何参数的@RequestMapping()修饰的方法中,没有处理静态资源请求的份,所以需要将@RequestMapping()指定参数就可以解决此问题,但是这样就不能够拦截其它没有被显式声明的请求了。

谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容