SpringBoot-静态资源映射

静态资源映射规则

在springBoot中的静态资源的映射是通过SpringMVC中的resourceHttpRequestHandler来进行实现的。在该请求映射器中默认规定了,SpringBoot会将classPath或者ServletContext下的/static (/public、/resources 或 /META-INF/resources)目录中,存放静态资源。并且其默认规定了所有的静态资源访问都被映射到/**,也就说,只要我们在访问静态资源时,只要是只需要在确保静态资源放在合理的位置,那么就可以通过类路径+文件名的形式来进行访问到该静态资源。
例如:
我现在在类路径下新建一个public目录,在其下放置一个AAA.jpg的图片静态资源。此时当我们启动服务后,就可以通过url:localhost:8001/AAA.jpg拿到这个静态资源。
图 1

图2

在官网中也同样说明,“在一个独立的web应用中,来自容器的默认的Servlet是开启的,并且该方式会充当一个回退支援。”
这句话的解释:我们知道在spring中当我们通过url的形式来访问资源时,首先这个请求会被spring的dispatchServlet给接收,此时会通过HanderManping和HandlerAdapter来在spring中查找是否有相应的控制器。如果找到,则会直接执行该控制器,而不会再通过resourceHttpRequestHandler来查找相应的静态资源。通俗的来说也就是,我们通过url访问时,首先会检查是否有同名控制器,即此时会优先处理servlet请求,而不会处理ServletContext下的静态资源请求。

例子:
现在我在Controller中建立一个处理器请求,该请求映射路径为/AAA.jpg
图3
此时再次请求相同路径(本意是访问静态资源)http://localhost:8001/AAA.jpg:
图4

[注]
(1)当然我们也可以修改SpringBoot中默认的资源映射路径,这也是常用的方式,因为修改后,可以避免在今后如果添加拦截器时,防止将静态资源给拦截了。修改的方式:

//默认
spring.mvc.static-path-pattern=/resources/**
//自定义
spring.mvc.static-path-pattern=/myStatic/**

那么今后就需要在访问时,以上述例子为例:当前项目+自定义映射路径+静态资源名即localhost:8001/myStatic/AAA.jpg

(2)我们也可以通过spring.resources.static-locations 属性来自定义静态资源的位置(使用一个目录位置列表替换默认值)。根 Servlet context path / 自动作为一个 location 添加进来。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐