一个网站的搭建,避免不了静态资源的导入,哪在springboot中该如何配置静态资源呢?靠死记硬背?肯定不是,下面我将带大家从源码的角度分析出静态资源的配置文件夹
关键源码@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {if (!this.resourceProperties.isAddMappings()) {logger.debug("Default resource handling disabled");return;}addResourceHandler(registry, "/webjars/**", "classpath:/meta-INF/resources/webjars/");addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {registration.addResourceLocations(this.resourceProperties.getStaticLocations());if (this.servletContext != null) {ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);registration.addResourceLocations(resource);}});}
源码讲解与展示 源码一:if (!this.resourceProperties.isAddMappings()) {logger.debug("Default resource handling disabled");return;}这句话表示 是否添加了路径映射,如果没有添加,代码将不会继续往下执行。这个值默认是true,大家可以自己点进去看看
源码二:
addResourceHandler(registry, "/webjars/**", "classpath:/meta-INF/resources/webjars/");在浏览其中访问 /webjars/xxx文件 等价于 /meta-INF/resources/webjars/xxx文件
补充:webjars其实是一个包管理网站:WebJars - Web Libraries in Jarshttps://www.webjars.org/
所以这行代码告诉我们静态资源可以放置两个位置:
位置一:
效果展示:
位置二:
上面这个包是我儿通过maven导入的依赖:
运行效果
源码三:
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {registration.addResourceLocations(this.resourceProperties.getStaticLocations());if (this.servletContext != null) {ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);registration.addResourceLocations(resource);}});这句代码的含义和源码二的含义很想:this.mvcProperties.getStaticPathPattern() ==》/** 点击源码可查看this.resourceProperties.getStaticLocations() ==》 { "classpath:/meta-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/" };所以意思就是浏览器访问 /xxx文件 等价于访问 { "classpath:/meta-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/" }这四个文件夹下的文件,优先级为:数组第一个优先级最高
这个大家可以自己新建几个文件夹试试
动态修改在 application.yaml 中也提供了修改 this.mvcProperties.getStaticPathPattern() 的值,其值默认是 /** , 你也可以自己修改为 例如:/yiqi
spring: mvc: static-path-pattern: /yiqi/**
运行结果: