SpringBoot-web開発(1):静的リソースのインポート(ソースコード分析)



Web開発で最も基本的な項目は静的リソースをインポートすることです。そのため、Springbootで静的リソースをインポートする方法は?答えはソースコードにあります、分析して分析しましょう〜

最初に、2回押してIDEAでクラスshiftを検索しWebMvcAutoConfugureます。これはwebMvcの自動構成クラスです。springboot静的リソースを処理するためのメソッドがその中にあります。
image-20200921192255315
下にスライドして、webMvc自動構成適応クラスを見つけます。メソッド、これWebMvcAutoConfigurationAdapter
image-20200921192234170
があります。addResourceHandlers静的リソースを処理するメソッドを追加するのは、Springbootプロジェクトです

次にこのコードを分析してみましょう。静的なリソースをインポートする2つの方法に対応して、最初にコードのオレンジ色の部分を解析してから、コードの青い部分を解析します。
画像-20200921191250400


方法1:WebJars

このaddResourceHandlers方法では、アイコンのオレンジ色のコードが1つのwebjarsことを述べています。これは、springbootが静的リソースをインポートする最初の方法です。これは何ですか?

if (!registry.hasMappingForPattern("/webjars/**")) {
    
    
   customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**")
         .addResourceLocations("classpath:/META-INF/resources/webjars/")
         .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}

1. webjarとは何ですか?

参照ボーエン:https : //www.jianshu.com/p/ca568526f0bd https://blog.coding.net/blog/spring-static-resource-process

通常の場合web开发、私たちはしばしば、いくつかの静的なリソースをインポートする必要がありますが、同様にjscssimagesおよびその他の静的リソース管理は混沌としたバージョンです

  • 例えばJqueryBootstrapVue.jsそれぞれのフロントエンドフレームの各成分の他のバージョンでは異なるが依存しています

  • 通常、これらのWebリソースをJavaディレクトリにコピーします。この手動コピーではバージョンエラーが発生する可能性があります。コピーバージョンが間違っていると、フロントエンドページを正しく表示できません。

では、バックエンド管理jarパックのようなソリューションはありますか?本日の紹介を紹介しますWebJars

  • WebJarsWebプロジェクトのリソースファイルをjarの形式で提供し、Mavenでこれらの依存ライブラリの管理を使用して、このWebリソースバージョンの一意性を確保します
  • WebjarsほとんどのSpring Boot場合、すべてのリソースを実行可能なjarにパッケージ化する必要性に基づいてマイクロサービスプロジェクト作成するために使用されます

2. webjarの使用

WebJarsリソースについては、公式Webサイト:https : //www.webjars.org/
image-20200921121150290
必要なリソースを見つけるためにWebサイトにアクセスします。各リソースには独自のMaven座標があります。プロジェクトにMaven依存関係を追加すると、直接使用できますこれらのリソースも。
たとえば、ここでは、インポートされたjquerymaven依存関係とインポートされたjqueryリソースを左側に表示できます
image-20200921121830938

3. Webjarsの構造

あなたが開始する前に、見てい下に理解し、パッケージのディレクトリ構造Jquerywebjarswebjars

META-INF
    └─maven
        └─org.webjars
            └─jquery
                └─pom.properties
                └─pom.xml
    └─resources
        └─webjars
            └─jquery
                └─3.5.1
                       └─(静态文件及源码)

4.ソースコードを解析する

次のコードを分析します。

//如果静态资源符合"/webjars/**"的格式
if (!registry.hasMappingForPattern("/webjars/**")) {
    
    
    //添加资源注册到"/webjars/**"
   customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**")
         .addResourceLocations("classpath:/META-INF/resources/webjars/")
         .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}

静的リソース名がと一致する場合は/webjars/**classpath:/META-INF/resources/webjars/パスに移動して検索し、リソースを/webjars/**パスに追加します。これら2つのパスは対応しています。

/webjars/**  --->  classpath:/META-INF/resources/webjars/

将来的には、登録パスの形式を介してブラウザから直接静的リソースにアクセスできるようになります。

そしてWebjars、すべての私たちの私たちは、これだけのMavenを通じて座標を導入する必要があるので、リソースは、このパス構造に適合し、かつそれらはすべて発見し、識別することができます。これは、我々は静的なリソースをインポートする方法です。
image-20200921122039544

5.テスト訪問

次に、静的リソースにアクセスできるかどうかをテストしてみましょう。ソースコードで指定されたアクセス形式/webjars/**classpath:/META-INF/resources/webjars/**パスに対応します。

http://localhost:8080/webjars/jquery/3.5.1/jquery.js

インポートされたjueryjs静的ファイルを見ることができます
image-20200921123135697




方法2:staticPathPattern

このaddResourceHandlersメソッドでは、アイコンの青いコードは、springbootが静的リソースをインポートする2番目の方法です

1.ソースコード分析

//获取staticPathPattern
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
//如果静态资源路径符合staticPathPattern的格式
if (!registry.hasMappingForPattern(staticPathPattern)) {
    
    
    customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)
                                         .addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))
                                         .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}

同様に、最初にそれを取得しstaticPathPattern、次にこのパスに登録するリソースを追加してから、このパスは何ですか?

クリックしgetStaticPathPattern
image-20200921194643300
てクリックしたstaticPathPattern
image-20200921194714793
ところ、このパスは/**次のとおりです。つまり、/**この形式で静的リソースにアクセスできるため、このパスに対応する実際のパスは何ですか。

コードをクリックすると、getStaticLocations()4つのパスが表示されます
image-20200921230923841

"classpath:/META-INF/resources/":就是上述的webjars
"classpath:/resources/":reources目录下的resources目录,不存在自己新建
"classpath:/static/":resources目录下的static目录
"classpath:/public/":resources目录下的public目录,不存在自己新建

image-20200921200824407

2.テスト訪問

たとえばpublic、静的ファイルディレクトリに配置します1.js

hello

image-20200921203423657
その後、メインプログラムを起動locaohost:8080/1.jsして静的リソースを正常に訪問しました。
image-20200921203451706
概要localhost:8080要求されたすべての静的リソースパスは、静的リソースが保存されている4つのディレクトリにあります。

私たちは、優先度、上記の異なるディレクトリに同じ名前が存在して複数の静的ファイルが存在する場合には、テストすることができます:resources> static>public




カスタムリソースパス

で、addResourceHandlers非常にメソッドの先頭は、そのようなA判定があります

//如果静态资源已经被自定义
if (!this.resourceProperties.isAddMappings()) {
    
    
    logger.debug("Default resource handling disabled");
    return;
}

あなたができるapplication.propertiesの静的リソースのパスをカスタマイズし、デフォルトは/**

spring.mvc.static-path-pattern=/zsr/**

通常、これを行うことはお勧めしません。上記の方法2は(明示的にとして定義されていない限り/**無効になります。

おすすめ

転載: blog.csdn.net/qq_45173404/article/details/108721839