真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

springboot2版本無法加載靜態(tài)資源問題怎么解決

這篇文章給大家介紹springboot2版本無法加載靜態(tài)資源問題怎么解決,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

公司主營業(yè)務(wù):網(wǎng)站設(shè)計、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出郫都免費做網(wǎng)站回饋大家。

前言

在學(xué)習(xí)springboot的過程中,發(fā)現(xiàn)無法引用靜態(tài)資源。我使用的是springboot2.2.1版本。

追溯源碼,終于解決。并記錄下解決思路。

默認加載路徑

首先得知道springboot默認加載得資源路徑是什么。

首先我們看WebMvcAutoConfiguration這個類。里面有一個方法叫做addResourceHandlers()

@Configuration(proxyBeanMethods = false)@ConditionalOnWebApplication(type = Type.SERVLET)@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,    ValidationAutoConfiguration.class })public class WebMvcAutoConfiguration {        

@Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {      

if (!this.resourceProperties.isAddMappings()) {        

logger.debug("Default resource handling disabled");        

return;      }     

 Duration cachePeriod = this.resourceProperties.getCache().getPeriod();      

CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();            

//所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找資源      if (!registry.hasMappingForPattern("/webjars/**")) {        customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**")            .addResourceLocations("classpath:/META-INF/resources/webjars/")            .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));      }            

//靜態(tài)資源文件夾映射      String staticPathPattern = this.mvcProperties.getStaticPathPattern();      

if (!registry.hasMappingForPattern(staticPathPattern)) {        customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)            .addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))            .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));      }    }}

首先springboot會將我們classpath:/META-INF/resources/webjars/路徑下的文件映射為/webjars/**

然后再一個if判斷進行靜態(tài)資源文件夾映射,首先判斷我們是否以使用 "/**" 做映射

如果沒有,則將"/**" 訪問當(dāng)前項目的任何資源,都去(如下靜態(tài)資源的文件夾)找映射

"classpath:/META‐INF/resources/","classpath:/resources/","classpath:/static/","classpath:/public/""/":當(dāng)前項目的根路徑

什么意思呢?舉一個例子,就是說默認情況下我們假如我們調(diào)用 http://localhost:8080/a.json

Springboot就會從上面得這幾個路徑下去找a.json這個文件。

問題所在

源碼也是如同猜想得這樣,那為什么我的代碼中,直接訪問靜態(tài)資源卻無法做映射呢?

我們再仔細看看WebMvcAutoConfiguration這個類。在其頭上有一個這個注解:

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

臥槽,瞬間恍然大悟。在我得配置文件中:

@Configurationpublic class MyMVCConfig extends WebMvcConfigurationSupport{  ...}

繼承了WebMvcConfigurationSupport這個類,使得springboot的自動裝配失效了。因為@ConditionalOnMissingBean這個注解得作用就是,當(dāng)容器中不存在這個類,如下得代碼才有作用。

為什么會這樣設(shè)計呢?

因為有時候我們得項目并不希望springboot給我們自動裝配。希望完全由我們自己來配置自己來掌握。

要想達到這個效果,springboot給我們提供了一個更為簡潔得方式。

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(DelegatingWebMvcConfiguration.class)public @interface EnableWebMvc {}

@EnableWebMvc注解會導(dǎo)入DelegatingWebMvcConfiguration.clss

而DelegatingWebMvcConfiguration又繼承了WebMvcConfigurationSupport

public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {

所以當(dāng)我們加上@EnableWebMvc也會有同樣得效果且簡潔。

自定義配置資源映射

springboot當(dāng)然也支持我們個性化得指定映射路徑,我總結(jié)了如下幾個方式:

配置類

@Configurationpublic class MyMVCConfig extends WebMvcConfigurationSupport{  @Override  public void addResourceHandlers(ResourceHandlerRegistry registry) {       registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");    }}

上面的意思就是:將所有/static下得文件全部映射到/static/**

配置項

在application.properties文件中加上如下配置項

spring.mvc.static-path-pattern=/**spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/,classpath:/public/

spring.mvc.static-path-pattern=/**:表示所有的訪問都經(jīng)過靜態(tài)資源路徑;

spring.resources.static-locations:在這里配置靜態(tài)資源路徑。

關(guān)于springboot2版本無法加載靜態(tài)資源問題怎么解決就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


網(wǎng)頁題目:springboot2版本無法加載靜態(tài)資源問題怎么解決
文章出自:http://weahome.cn/article/ghdopd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部