目前,基於servlet 3.0web具備兩種發佈方式:1. 採用獨立的web容器,以war包的形式發佈;2. 採用內嵌式容器,以jar包方式發佈。 spring boot提供了二者的繼承方案。 現針對當前技術棧中使用最多的jar包發佈方式進行相關說明。css
spring boot的工程結構,採用maven標準的工程結構。html
src/main/java src/main/resource |__________static |_________js |_________images |_________css |----------public | index.html | index.vm
其中java目錄下存放全部的工程源碼,resource目錄下存放配置文件、靜態資源、頁面等。
static目錄:主要存放靜態文件:如js、圖片等
public目錄下主要存放頁面、模板等相關的展現文件。java
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">。此處建議使用相對路徑,或者是使用帶server.contextPath的絕對路徑。
在此,咱們的靜態資源存放在 classpath:/static,且映射的 url 爲 /web
Spring boot對於靜態資源的加載過程,在WebMvcAutoConfiguration類中,具備完整的體現。
其中:spring
String staticPathPattern = "/**" String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" };
也就是說,spring boot在檢測到該工程是一個web工程時,在默認的狀況下會自動加載上述目錄下的全部資源。 注意:無需使用 @EnaleWebMvc 註解。使用了 @EnableWebMvc 註解後 WebMvcAutoConfiguration 提供的默認配置會失效,必須提供所有配置。springboot
咱們使用 spring boot 提供的編寫配置文件的方式,實現上面資源配置。app
application.properties
設置靜態資源的存放地址maven
spring.resources.static-locations=classpath:/resources 。。。。。。
建議參看:深刻 Spring 系列之靜態資源處理以獲取詳細信息。ide
經過查看 ResourceProperties 這個類能夠看到,該類頂部有一個註解 @ConfigurationProperties(prefix="spring.resources", ignoreUnknownFields = false)。spring-boot
ConfigurationProperties 是用來注入值的,prefix = 「spring.resources」 表示前綴。好比咱們配置文件中的 spring.resources.static-locations=classpath:/resources 這個配置,去掉 spring.resources 這個前綴,剩下的爲 static-locations ,則它的值 classpath:/resources 會被注入到 ConfigurationProperties 類的 staticLocations 成員變量中。經過這種方法,咱們就能經過編寫配置文件改變類的狀態而無需編寫代碼。固然,如何使用這些配置的關鍵仍是要知道這些成員變量的做用。
若是我不太滿意目前的目錄結構,能夠經過自定以的方式,調整springboot的資源加載。
@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">訪問。
在此,咱們的靜態資源存放在 classpath:/myResource,且映射的 url 爲 /myResource
注意:此處的路徑是是添加,不是替換,添加不影響原來的默認約定。非要自定義,那就配置類繼承WebMvcConfigurerAdapter
http://blog.csdn.net/xichenguan/article/details/52794862
http://www.cnblogs.com/chry/p/5877979.html
https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot
http://blog.csdn.net/xichenguan/article/details/52794862