デフォルトのサーブレット
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"/>