Spring Boot的靜態資源,比如圖片應該放在什么位置呢, 如果你放在傳統WEB共的類似地方, 比如webapp或者WEB-INF下,你會得到一張示意文件未找到的破碎圖片。那應該放哪里呢? 百度一搜, 各種長篇大論,讓人頭痛。
1. 默認位置:
Spring Boot能大大簡化WEB應用開發的原因, 最重要的就是遵循“約定優於配置”這一基本原則。Spring Boot的關於靜態資源的默認配置已經完全滿足絕大部分WEB應用的需求。沒必要去弄手續繁雜的自定義,用Spring Boot的約定就好了。
在Maven 工程目錄下,所有靜態資源都放在src/main/resource目錄下,結構如下:
src/main/resource |__________static |_________js |_________images |_________css .....
例如,imges目錄下的demo.jpg 在HTML/JSP中訪問是的路徑就是<img src="/images/demo.jpg">, 因為Spring Boot的缺省工作目錄就是src/main/java, 當訪問資源時,就是src/main/resources, 而/static/**被SPRING BOOT被映射到了classpath:/static下。所以也可以不帶起始的“/”,直接寫成<img src="images/demo.jpg">。
以下代碼示例為Hello World 加了個圖片顯示, 這里的demo.jpg在maven工程的位置存放就是src/main/resource/static/images/demo.jpg,
可用<img src="image/demo.jpg">訪問
@Controller //@EnableAutoConfiguration public class HelloController { @RequestMapping("/") @ResponseBody public String hello() { return "hello world <img src=\"image/demo.jpg\">"; } }
2. 添加自定義:
注意是添加,不是替換,添加不影響原來的默認約定。非要自定義,那就配置類繼承WebMvcConfigurerAdapter
@Configuration public class MyWebAppConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/myResource/**").addResourceLocations("classpath:/myResource/"); super.addResourceHandlers(registry); } }
這個是添加了一個新位置:
src/main/resource |__________myResource
如果newDemo.jpg放在src/main/resource/myResource/images/newDemo.jpg,那么就可用<img src="image/newDemo.jpg">訪問