デフォルトのサーブレット

Spring MVC を使用すると、DispatcherServlet を / にマッピングできます (これにより、コンテナーのデフォルトサーブレットのマッピングがオーバーライドされます) 一方で、静的リソースリクエストをコンテナーのデフォルトサーブレットで処理できます。これは、/** の URL マッピングと、他の URL マッピングに対して最も低い優先順位で DefaultServletHttpRequestHandler を構成します。

このハンドラーは、すべてのリクエストをデフォルトのサーブレットに転送します。他のすべての URL HandlerMappings の順序で最後のままにしておく必要があります。<mvc:annotation-driven> を使用する場合がそうです。あるいは、独自のカスタマイズされた HandlerMapping インスタンスをセットアップする場合、その order プロパティを DefaultServletHttpRequestHandler の値、つまり Integer.MAX_VALUE よりも低い値に設定してください。

次の例は、デフォルトのセットアップを使用して機能を有効にする方法を示しています。

  • Java

  • Kotlin

  • XML

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}
}
@Configuration
class WebConfiguration : WebMvcConfigurer {

	override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) {
		configurer.enable()
	}
}
<mvc:default-servlet-handler/>

/ サーブレットマッピングをオーバーライドする場合の注意点は、デフォルトサーブレットの RequestDispatcher はパスではなく名前で取得する必要があることです。DefaultServletHttpRequestHandler は、ほとんどの主要なサーブレットコンテナー (Tomcat、Jetty、GlassFish、JBoss、WebLogic、WebSphere を含む) の既知の名前のリストを使用して、起動時にコンテナーのデフォルトサーブレットを自動検出しようとします。デフォルトサーブレットが別の名前でカスタム構成されている場合、またはデフォルトサーブレット名が不明な別のサーブレットコンテナーが使用されている場合は、次の例に示すように、デフォルトサーブレットの名前を明示的に指定する必要があります。

  • Java

  • Kotlin

  • XML

@Configuration
public class CustomDefaultServletConfiguration implements WebMvcConfigurer {

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable("myCustomDefaultServlet");
	}
}
@Configuration
class CustomDefaultServletConfiguration : WebMvcConfigurer {

	override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) {
		configurer.enable("myCustomDefaultServlet")
	}
}
<mvc:default-servlet-handler default-servlet-name="myCustomDefaultServlet"/>