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

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

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

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

  • Java

  • Kotlin

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

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

	override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) {
		configurer.enable()
	}
}

次の例は、XML で同じ構成を実現する方法を示しています。

<mvc:default-servlet-handler/>

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

  • Java

  • Kotlin

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

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

	override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) {
		configurer.enable("myCustomDefaultServlet")
	}
}

次の例は、XML で同じ構成を実現する方法を示しています。

<mvc:default-servlet-handler default-servlet-name="myCustomDefaultServlet"/>