静的リソースにアクセスする際に404 springboot 2.xの問題が発生します

すぐにアイデアを通じてプロジェクトをビルドSpringboot:

springbootバージョン2.1.6

次のように情報を表示する行では、静的リソースへのアクセスをspringboot:

"CLASSPATH:/ META-INF /リソース/"  "CLASSPATH:/リソース/"  "CLASSPATH:/静的/"  "CLASSPATH:/公共/" 
"/":プロジェクトの現在のルートパス

静的リソースにアクセスする際の試験問題ありませんした後、コードの構成によってリソースにアクセスし、ログインページには、404が登場しました。

インターネット上のアクセスパスを設定するには、application.ymlないようだ(またはプロパティ)静的リソースへのアクセス404、の多くを見つけるために、それは、Configクラスの彼らの定義です。

その後、原因タイムコードの設定で見つかったソースコードを見てください。彼は、継承されたWebMvcConfigurationSupport次のような理由から、全体のアクセスリソースの故障が生じ、このクラス:

最初のステップ:

  場所springboot静的リソースへのアクセスを確認し、原因springbootは自動的にそう見つけ、コンフィギュレーションをロードWebMvcAutoConfiguration多くの方法がありますが、この構成のクラスを、

  ただ、マッピングリソースの方法を見つけます:

公共 のボイドaddResourceHandlers(ResourceHandlerRegistryレジストリ){
  場合(!この.resourceProperties.isAddMappings()){ 
    logger.debug( "デフォルトのリソースが無効扱い" ); 
  } { 
    期間cachePeriod = この.resourceProperties.getCache()getPeriod()。
    CacheControl cacheControl = この.resourceProperties.getCache()getCachecontrol()toHttpCacheControl()。。。
    <! - / webjars / **访问的、资源映射规则- >
    もし(!registry.hasMappingForPattern( "/ webjars / **" )){       この.customizeResourceHandlerRegistration(registry.addResourceHandler(新しい文字列[] { " / webjars / ** "})。
          addResourceLocations(新しい文字列[] {" クラスパス:/ META-INF /リソース/ webjars /。"})setCachePeriod(これは.getSeconds (cachePeriod))setCacheControl(cacheControl))。     }  <! -静态资源映射规则- >     列staticPathPattern      = この.mvcProperties.getStaticPathPattern()。     もし(!registry.hasMappingForPattern(staticPathPattern)){       この .customizeResourceHandlerRegistration(registry.addResourceHandler(文字列[] {staticPathPattern})。
          addResourceLocations(getResourceLocations(これresourceProperties.getStaticLocations() ))。
                    setCachePeriod(この.getSeconds(cachePeriod))setCacheControl(cacheControl))。      }    } }

 最初webjars負荷:資源を見つける/ / META-INF /リソース/ webjars;:すべて/ webjars / **、クラスパスを行ってきました

  第二の静的リソースマッピング:

  staticPathPattern   ソースコードを見るためにクリック:staticPathPattern= / ** ;

  resourceProperties.getStaticLocations()のソースコードを見るためにクリック:

 プライベート 静的 最終列[] CLASSPATH_RESOURCE_LOCATIONS = 新しい文字列[] { "クラスパス:/ META-INF /リソース/"、 "クラスパス:/リソース/"、 "クラスパス:/静的/"、 "クラスパス:/ /パブリック" }。
    プライベートString []型staticLocations。
    プライベート ブールaddMappings。
    民間 最終ResourceProperties.Chainチェーン。
    民間 最終ResourceProperties.Cacheキャッシュ; 

    パブリックResourcePropertiesの(){
         このstaticLocations = CLASSPATH_RESOURCE_LOCATIONSこの.addMappings = ;
        この .chain = 新しいResourceProperties.Chain();
        この .cache = 新しいResourceProperties.Cache(); 
    } 

    パブリック文字列[] getStaticLocationsは() {
         戻り 、これをstaticLocations ; 
    }

 

テストの開始時間とリソースにアクセスするためのパスとして見上記のソースを通じ、何の問題、なぜ静的な構成設定を通じてリソースにアクセスすることはできません見て何度も何度も、そのページにログインWebMvcAutoConfigurationを次のように見つかったソースを:

@Configuration 
@ConditionalOnWebApplication(タイプ = Type.SERVLET)
 @ConditionalOnClass({サーブレット。クラス、のDispatcherServlet。クラス、WebMvcConfigurer。クラス})
@ConditionalOnMissingBean({WebMvcConfigurationSupport。クラス}) 
@AutoConfigureOrder( -2147483638 
@AutoConfigureAfter({DispatcherServletAutoConfiguration。クラス、TaskExecutionAutoConfiguration。クラス、ValidationAutoConfiguration。クラス})
 パブリック クラス WebMvcAutoConfiguration {=
@ConditionalOnClass@ConditionalOnMissingBean WebMvcAutoConfigurationが自動的にロードする設定条件の両方注釈
ログインページを設定するときに、単に継承WebMvcConfigurationSupportのクラス

@ConditionalOnMissingBean({ WebMvcConfigurationSupport。クラス}) Beanをロードするときにコンテナが自動的WebMvcAutoConfigurationをロードしない、
継承WebMvcAutoConfigurationの道ができますが、手動でパスをマッピングするためのリソースを追加する必要があり、WebMvcAutoConfiguration他の自動アドインは、独自に対処する必要があります。

@Condition alOnClass({Servlet.class、DispatcherServlet.class、WebMvcConfigurer.classが自動的にロード})容器豆WebMvcAutoConfigurationローディング
改訂構成クラスが実装WebMvcConfigurerのインターフェースログオンページは、通常、静的リソースへのアクセスを処理します。

 

   

 

おすすめ

転載: www.cnblogs.com/smokerBig/p/11121614.html