默认Servlet

Spring MVC允许将DispatcherServlet映射到/(从而覆盖容器的默认Servlet映射),同时仍然允许静态资源请求由容器的默认Servlet处理。它配置了一个DefaultServletHttpRequestHandler,其URL映射为/**,并相对于其他URL映射具有最低优先级。

此处理程序将所有请求转发到默认Servlet。因此,它必须保持在所有其他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/>
/ Servlet映射的注意事项是,默认Servlet的 RequestDispatcher必须通过名称而不是路径检索。 DefaultServletHttpRequestHandler尝试在启动时自动检测容器的默认Servlet,使用大多数主要Servlet容器的已知名称列表(包括Tomcat、Jetty、GlassFish、JBoss、Resin、WebLogic和WebSphere)。如果默认Servlet已经使用不同的名称进行自定义配置,或者正在使用默认Servlet名称未知的不同Servlet容器,则必须显式提供默认Servlet的名称,如以下示例所示:

  • 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"/>