目次
Web開発で最も基本的な項目は静的リソースをインポートすることです。そのため、Springbootで静的リソースをインポートする方法は?答えはソースコードにあります、分析して分析しましょう〜
最初に、2回押してIDEAでクラスshift
を検索しWebMvcAutoConfugure
ます。これはwebMvcの自動構成クラスです。springboot静的リソースを処理するためのメソッドがその中にあります。
下にスライドして、webMvc自動構成適応クラスを見つけます。メソッド、これWebMvcAutoConfigurationAdapter
があります。addResourceHandlers
静的リソースを処理するメソッドを追加するのは、Springbootプロジェクトです
次にこのコードを分析してみましょう。静的なリソースをインポートする2つの方法に対応して、最初にコードのオレンジ色の部分を解析してから、コードの青い部分を解析します。
方法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开发
、私たちはしばしば、いくつかの静的なリソースをインポートする必要がありますが、同様にjs
、css
、images
およびその他の静的リソース管理は混沌としたバージョンです
例えば
Jquery
、Bootstrap
、Vue.js
それぞれのフロントエンドフレームの各成分の他のバージョンでは異なるが依存しています通常、これらのWebリソースをJavaディレクトリにコピーします。この手動コピーではバージョンエラーが発生する可能性があります。コピーバージョンが間違っていると、フロントエンドページを正しく表示できません。
では、バックエンド管理
jar
パックのようなソリューションはありますか?本日の紹介を紹介しますWebJars
WebJars
Webプロジェクトのリソースファイルをjarの形式で提供し、Mavenでこれらの依存ライブラリの管理を使用して、このWebリソースバージョンの一意性を確保しますWebjars
ほとんどのSpring Boot
場合、すべてのリソースを実行可能なjarにパッケージ化する必要性に基づいてマイクロサービスプロジェクトを作成するために使用されます
2. webjarの使用
WebJars
リソースについては、公式Webサイト:https : //www.webjars.org/
必要なリソースを見つけるためにWebサイトにアクセスします。各リソースには独自のMaven座標があります。プロジェクトにMaven依存関係を追加すると、直接使用できますこれらのリソースも。
たとえば、ここでは、インポートされたjquery
maven依存関係とインポートされたjquery
リソースを左側に表示できます
3. Webjarsの構造
あなたが開始する前に、見てい下に理解し、パッケージのディレクトリ構造
Jquery
webjars
webjars
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を通じて座標を導入する必要があるので、リソースは、このパス構造に適合し、かつそれらはすべて発見し、識別することができます。これは、我々は静的なリソースをインポートする方法です。
5.テスト訪問
次に、静的リソースにアクセスできるかどうかをテストしてみましょう。ソースコードで指定されたアクセス形式/webjars/**
はclasspath:/META-INF/resources/webjars/**
パスに対応します。
http://localhost:8080/webjars/jquery/3.5.1/jquery.js
インポートされたjuery
js静的ファイルを見ることができます
方法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
てクリックしたstaticPathPattern
ところ、このパスは/**
次のとおりです。つまり、/**
この形式で静的リソースにアクセスできるため、このパスに対応する実際のパスは何ですか。
コードをクリックすると、getStaticLocations()
4つのパスが表示されます
"classpath:/META-INF/resources/":就是上述的webjars
"classpath:/resources/":reources目录下的resources目录,不存在自己新建
"classpath:/static/":resources目录下的static目录
"classpath:/public/":resources目录下的public目录,不存在自己新建
2.テスト訪問
たとえばpublic
、静的ファイルをディレクトリに配置します1.js
hello
その後、メインプログラムを起動locaohost:8080/1.js
して静的リソースを正常に訪問しました。
概要: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は(明示的にとして定義されていない限り/**
)無効になります。