-
项目背景:
script 引入磁盘上的js文件,读取js文件中的内容作为全局变量。
-
Spring Boot 静态资源默认配置
- 在一个Web项目中往往需要处理一些静态资源的请求,比如css,js,image文件的等。Spring Boot提供了一种很简单的方式,即使用默认配置。
- 默认是启用了静态资源映射的,并且,当文件在classpath:/META-INF/resources/, classpath:/resources/, classpath:/static/, classpath:/public/这四个目录下的话可以直接返回。
-
Spring Boot 配置本地资源映射路径
方式一:修改静态资源映射的方式:在application.properties中配置静态资源访问路径: spring.mvc.static-path-pattern=/** #表示所有的访问都经过静态资源路径 spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${file.uploadFolder} #覆盖默认配置,所以需要将默认的也加上否则static、public等这些路径将不能被当作静态资源路径 #在最末尾的file:${web.upload-path}中的file:表示是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量
方式二:代码方式映射的方式:
@Configuration //配置类注解
public class UploadFilePathConfig extends WebMvcConfigurationSupport {
@Value("${file.uploadFolder}")
private String uploadFolder;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("file:" + uploadFolder);
super.addResourceHandlers(registry);
}
}
- html src文件引入 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script src="./xxx.js"></script>
</html>
src引入的是js文件
xxx.js是项目外的静态资源
./ 相对路径, 会动态匹配当前请求的路径作为前缀
/ 绝对路径
- 静态资源404问题总结:
- window环境中 uploadFolder设置外部硬盘目录 D:\data\ 可读到D盘下的js文件,linux下则异常404
原因分析:linux使用docker部署项目,需要把js所在的目录挂载到容器中,并且路径应从容器的根目录开始。
即 /app/xxx/
- 若设置 server.servlet.context-path=/xxx 则每个静态资源都需要加上该值, 否则会出现404的问题
<script src="./xxx.js"></script>
使用./ 会匹配当前请求的路径作为前缀,使设置的应用上下文生效