springboot静态资源访问问题归纳

以下内容基于springboot 2.3.4.RELEASE


1、默认配置的springboot项目,有四个静态资源文件夹,它们是有优先级的,如下:

"classpath:/META-INF/resources/",  (优先级最高)

"classpath:/resources/",

"classpath:/static/",

"classpath:/public/"  (优先级最低)

也就是说,"classpath:/META-INF/resources/" 中有pay.html,其他三个有pay.html都没用,因为只会展示最优先那个

我该怎么访问?

http://localhost:8093/terminal/pay.html  就能访问了  (terminal是项目名)

你不要在pay.html前面加static啊,public之类的,如http://localhost:8093/terminal/static/pay.html

这样是访问不到资源的。这是因为Spring Boot的静态资源映射机制会自动从配置的静态资源位置(如 /META-INF/resources//resources//static//public/)中查找文件,但它在构建URL路径时不会包含这些文件夹名。(你如果能访问,那肯定是项目中存在:自定义静态路径规则)

2、整合thymeleaf,我该怎么访问?

1)  先加依赖

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>

2)  创建controller

@RequestMapping("/base")
@Controller
public class BaseController {

    @GetMapping("/pay")
    public String pay() {
        return "pay2";
    }
}

3) 如: http://localhost:8093/terminal/base/pay 会去templates文件夹下找pay2.html文件。为什么?因为模板有默认配置,也就是说你在application.yml中配置的

spring:
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html

就是个默认配置,你不写这段配置代码是同样效果。

3、添加自定义拦截器后访问不到静态资源

如:拦截器加入下面的代码

@Configuration
public class JwtWebConfig implements WebMvcConfigurer {
    /**
     * 添加拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //拦截路径可自行配置多个 可用 ,分隔开

        registry.addInterceptor(new JwtInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/error")
                .excludePathPatterns("/abc/**"); //不拦截以/abc开头的URI请求
    }

}

 yml配置文件中也要重新定义静态资源的匹配规则,只有当匹配到了,才会认为这是个静态资源请求

spring:
  mvc:
    static-path-pattern: /abc/**

也就是说,当我访问http://localhost:8093/terminal/abc/pay.html时,会被认为是一个静态资源访问请求,它会去找静态资源文件夹下的pay.html,同样按照优先级来找。

4、注意缓存

做测试时,一定要把它禁掉。idea中如果是拷贝粘贴的文件,要留意target包下是否有这个文件存在,没有就运行compile

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值