Web開発を行う場合、css、image、jqueryなどのファイルなど、多くの静的リソースが存在するため、SpringBootは静的リソースをどのようにマップしますか?次に、SpringBootの静的リソースのマッピングルールを簡単に紹介して、その謎を解き明かします。
initを使用してSpringBootプロジェクトを作成し、Webモジュールを選択できます。また、SpringBootは、デフォルトで静的リソース処理、つまりWeb開発に関連するさまざまな構成プロパティとメソッドを格納する構成クラスWebMvcAutoConfigurationを提供します。
1、addResourceHandlers()方法
addResourceHandlers()メソッドは、静的リソースパスのデフォルトの処理を行い、そのソースコードは次のとおりです。
@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/寻找资源;
//webjars:以jar包的方式引入静态资源,例如:jquery
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/")
.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
// "/**" 访问当前项目的任何资源,都在静态资源的文件夹找映射
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
//静态资源文件夹映射
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)
.addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))
.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
}
2.webjarsが提供するリソースファイル
過去にSSMを使用してWebプロジェクトを実行する場合、静的リソースを格納するためにwebappディレクトリを使用していました。しかし、私たちは合格しました。。。作成されたSpringBootプロジェクトにはそのようなディレクトリはありません。SpringBootは独自のマッピングルールを提供します。上記のコードでは、webjarsがjarパッケージの形式で静的リソースを導入し、classpath:/ META-INF / resources / webjars /に移動してリソースを検索することがわかります。この時、誰かが混乱していますか?webjarとは何ですか?素人の言葉で言えば:WebJarsはJarsの形式でWebプロジェクトのリソースファイルを提供し、Mavenを使用してこれらの依存ライブラリを管理し、これらのWebリソースバージョンの一意性を確保します。
例としてjqueryの紹介を見てください:
(1)webjarsの公式Webサイトを入力します:https://www.webjars.org/ 。
(2)以下の操作を行ってください。
(3)springbootプロジェクトにMaven依存関係を導入します。
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.4.1</version>
</dependency>
(4)springbootプロジェクトを開始し、http:// localhost:8080 / webjars / jquery / 3.4.1 /jquery.jsにアクセスします。結果は次のとおりです。
3.いくつかのカスタム静的ファイルへのアクセス
/ **現在のプロジェクトの任意のリソースにアクセスします。JS、CSS、jQueryファイルなどの独自の静的リソースファイルの場合、SpringBootはデフォルトで次のパスから読み取ります。
「クラスパス:/ META‐INF / resources /」
「クラスパス:/ resources /」
「クラスパス:/ static /」
「クラスパス:/ public /」
「/」:現在のプロジェクトのルートパス
例:次のように、リソースの下のbootstrap.jsにアクセスします。
springbootを開始し、次のサイトにアクセスします:http:// localhost:8080 / bootstrap.js
4. / **マッピングindex.html
SpringBootのデフォルトの静的リソースアクセスパスの下にindex.htmlという名前のファイルを追加します。http:// localhost:8080 /にアクセスすると、このindex.htmlに自動的にジャンプします。つまり、SpringBootのデフォルトのホームページはindex.htmlであり、「/**
」でマップされ ます。次のように:
(1)publicの下にindex.htmlを作成します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>hello SpringBoot</h2>
</body>
</html>
(2)アクセス:http:// localhost:8080 /
5.カスタムアイコン** / favicon.ico
SpringBootでは、デフォルトの静的リソースファイルパスにico形式のアイコンを配置し、favicon.icoという名前を付けることができます。これにより、アプリケーションアイコンが自動的に指定されたアイコンになります。** /favicon.icoはすべて静的リソースファイルの下にあります。次のように実行します。
(1)ロゴ画像を.ico形式に変換する場合、名前はfavicon.icoである必要があります
(2)画像をsrc / main / resourecsディレクトリに直接配置します
(3)プロジェクトを再起動します。
6.application.propertiesで静的リソースアクセスパスを手動で構成します
application.properties構成ファイルで次のように編集します。
# 自定义静态资源访问路径,可以指定多个,之间用逗号隔开
spring.resources.static-locations=classpath:/dir01/,classpath:/dir02
注:コンマで区切って複数のカスタム静的リソースアクセスパスを指定できますが、静的リソースをカスタマイズすると、SpringBootのデフォルトの静的リソースパスは機能しなくなります。