最新の安定バージョンについては、Spring Framework 6.2.6 を使用してください! |
デフォルトのサーブレット
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"/>