解决Spring下浏览器无法实时访问本地静态资源
场景1:原本地文件test.json中内容为 “1”。我们通过前后端交互操作,修改test.json的内容为 “2”。此时前端再次读取test.json,会发现内容依旧为 “1”,即前端并不会实时同步本地静态资源。
场景2:如下代码我访问了一个还未创建的本地资源show.jpg,显然,浏览器会报404错误。因为图片不存在。然而当我立刻在如下目录创建一个show.jpg后,发现浏览器依旧报404错误,无法同步我们本地文件夹中图片。
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><img src="E:\IdeaProjects\checkinsystem\src\main\resources\templates\WebSecurityTest\show.jpg">
</body>
</html>
解决方法:Tomcat并不会实时同步我们的本地文件,即使我们在IDEA工具中,打开如下的选项,我们依然要进入IDEA后,才会进行本地资源的同步。
我们需要引入WebMVC配置类,其中有两种引入方式:
一种是通过public class ResourceConfig implements WebMvcConfigurer
的方式,并在主类中开启@EnableWebMvc
@Configuration
public class AppConfig extends WebMvcConfigurationSupport {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {/** 说明:增加虚拟路径(经过本人测试:在此处配置的虚拟路径,用springboot内置的tomcat时有效,* 用外部的tomcat也有效;所以用到外部的tomcat时不需在tomcat/config下的相应文件配置虚拟路径了,阿里云linux也没问题)*///registry.addResourceHandler(mappingUrl + "/**").addResourceLocations("file:" + uploadUrl + File.separator);//阿里云(映射路径去除盘符)registry.addResourceHandler("/path/**").addResourceLocations("file:///C:/image/"); //将本地的c://image路径映射为localhost:端口号/path/**super.addResourceHandlers(registry);}
}
一种是通过public class ResourceConfig extends WebMvcConfigurationSupport
的方式
@Configuration
public class ResourceConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/path/**").addResourceLocations("file:///C:/image/"); }
}
结果:配置完成后,我们在前端请求静态资源时,只需要使用http://localhost:端口号/path/文件名就可以实时查看本地资源了。(如下图所示,写绝对路径的图片会报404访问错误;写我们配置好的映射路径,则会正确访问本地资源)