静的リソース

このオプションは、Resource (Javadoc) ベースの場所のリストから静的リソースを提供する便利な方法を提供します。

次の例では、/resources で始まるリクエストが与えられた場合、相対パスを使用して、Web アプリケーションルートの /public または /static のクラスパスに関連する静的リソースを検索して提供します。リソースは、ブラウザーキャッシュを最大限に活用し、ブラウザーからの HTTP リクエストを削減するために、1 年後の有効期限で提供されます。Last-Modified 情報は Resource#lastModified から推測されるため、HTTP 条件付きリクエストは "Last-Modified" ヘッダーでサポートされます。

次のリストは、その方法を示しています。

  • Java

  • Kotlin

  • XML

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/resources/**")
				.addResourceLocations("/public", "classpath:/static/")
				.setCacheControl(CacheControl.maxAge(Duration.ofDays(365)));
	}
}
@Configuration
class WebConfiguration : WebMvcConfigurer {

	override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
		registry.addResourceHandler("/resources/**")
			.addResourceLocations("/public", "classpath:/static/")
			.setCacheControl(CacheControl.maxAge(Duration.ofDays(365)))
	}
}
<mvc:resources mapping="/resources/**" location="/public, classpath:/static/"
			   cache-period="31556926" />

リソースハンドラーは、ResourceResolver (Javadoc) 実装と ResourceTransformer (Javadoc) 実装のチェーンもサポートします。これらを使用して、最適化されたリソースを操作するためのツールチェーンを作成できます。

コンテンツ、固定アプリケーションバージョン、その他から計算された MD5 ハッシュに基づいて、バージョン付きリソース URL に VersionResourceResolver を使用できます。ContentVersionStrategy (MD5 ハッシュ)は、モジュールローダーで使用される JavaScript リソースなどのいくつかの顕著な例外を除き、適切な選択です。

次の例は、VersionResourceResolver の使用方法を示しています。

  • Java

  • Kotlin

  • XML

@Configuration
public class VersionedConfiguration implements WebMvcConfigurer {

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/resources/**")
				.addResourceLocations("/public/")
				.resourceChain(true)
				.addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"));
	}
}
@Configuration
class VersionedConfiguration : WebMvcConfigurer {

	override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
		registry.addResourceHandler("/resources/**")
			.addResourceLocations("/public/")
			.resourceChain(true)
			.addResolver(VersionResourceResolver().addContentVersionStrategy("/**"))
	}
}
<mvc:resources mapping="/resources/**" location="/public/">
	<mvc:resource-chain resource-cache="true">
		<mvc:resolvers>
			<mvc:version-resolver>
				<mvc:content-version-strategy patterns="/**"/>
			</mvc:version-resolver>
		</mvc:resolvers>
	</mvc:resource-chain>
</mvc:resources>

次に、ResourceUrlProvider を使用して URL を書き換え、リゾルバーとトランスフォーマーのチェーン全体を適用します(たとえば、バージョンを挿入します)。MVC 構成は ResourceUrlProvider Bean を提供するため、他に注入することができます。Thymeleaf、JSP、FreeMarker、HttpServletResponse#encodeURL に依存する URL タグを使用するその他の場合、ResourceUrlEncodingFilter を使用して書き換えを透過的にすることもできます。

EncodedResourceResolver (たとえば、gzip または brotli でエンコードされたリソースを提供するため)と VersionResourceResolver の両方を使用する場合、この順序で登録する必要があることに注意してください。これにより、エンコードされていないファイルに基づいて、コンテンツベースのバージョンが常に確実に計算されます。

WebJars (英語) の場合、/webjars/jquery/1.2.0/jquery.min.js のようなバージョン管理された URL が推奨され、最も効率的な使用方法です。関連するリソースの場所は Spring Boot を使用してすぐに構成でき (または ResourceHandlerRegistry を介して手動で構成できます)、org.webjars:webjars-locator-core 依存関係を追加する必要はありません。

/webjars/jquery/jquery.min.js のようなバージョンのない URL は、org.webjars:webjars-locator-core ライブラリがクラスパスに存在する場合に自動的に登録される WebJarsResourceResolver を介してサポートされますが、アプリケーションの起動を遅くする可能性のあるクラスパススキャンが犠牲になります。リゾルバーは、jar のバージョンを含むように URL を書き換えることができます。また、バージョンのない受信 URL (たとえば、/webjars/jquery/jquery.min.js から /webjars/jquery/1.2.0/jquery.min.js へ) と照合することもできます。

ResourceHandlerRegistry に基づく Java 構成では、最終変更時の動作や最適化されたリソース解決など、きめ細かい制御のための追加オプションが提供されます。