对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

默认Servlet

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

此处理器将所有请求转发到默认的Servlet。因此,它必须保持在所有其他URL HandlerMappings的最后。如果你使用<mvc:annotation-driven>,就是这种情况。或者,如果你设置了自己的自定义HandlerMapping实例,请确保将其order属性设置为低于DefaultServletHttpRequestHandler的值,DefaultServletHttpRequestHandler的值是Integer.MAX_VALUEspring-doc.cadn.net.cn

以下示例展示了如何通过默认设置启用该功能:spring-doc.cadn.net.cn

@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中实现相同的配置:spring-doc.cadn.net.cn

<mvc:default-servlet-handler/>

覆盖/ Servlet映射的注意事项是,必须通过名称而不是路径来检索默认Servlet的RequestDispatcher。在启动时,DefaultServletHttpRequestHandler试图自动检测容器中的默认Servlet,使用大多数主要Servlet容器(包括Tomcat、Jetty、GlassFish、JBoss、Resin、WebLogic和WebSphere)的已知名称列表进行自动检测。如果默认Servlet已被自定义配置为不同的名称,或者正在使用一个未知默认Servlet名称的不同Servlet容器,则必须显式提供默认Servlet的名称,如下例所示:spring-doc.cadn.net.cn

@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中实现相同的配置:spring-doc.cadn.net.cn

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