Springboot web工程

背景

目前,基於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靜態資源加載

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

webjars

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

相關文章
相關標籤/搜索