以下内容基于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