正如JB Nizet已经试图解释的那样,两者都用于提供静态资源。
所以你的问题是你基于Java的Spring配置有
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**").addResourceLocations("/resources/bootstrap/");
}
那你为什么需要
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
或者为什么如果你有<mvc:default-servlet-handler/>
<mvc:resources mapping="/assets/**" location="/resources/bootstrap/" />
在 xml 配置方面。
要根据您提出的要求回答您的问题,您不需要覆盖,因为您已经覆盖并提供了静态资源映射。configureDefaultServletHandling()
通过重写方法,您实质上是要求为提到的资源提供资源位置。addResourceHandlers()
ResourceHttpRequestHandler
但是,如果您覆盖并启用它,那么您实际上是在要求默认的 servlet(映射到 “/”)来为资源提供服务。如果您正在使用它,则需要注意几件事。引用文档configureDefaultServletHandling()
-
这允许将 DispatcherServlet 映射到 “/”(从而覆盖容器的默认 Servlet 的映射),同时仍然允许静态资源请求由容器的默认 Servlet 处理。它配置一个 DefaultServletHttpRequestHandler,其 URL 映射为“/**”,相对于其他 URL 映射的优先级最低。
此处理程序会将所有请求转发到默认的 Servlet。因此,重要的是,它按照所有其他 URL 处理程序映射的顺序保持最后。如果您使用或正在设置自己的自定义 HandlerMapping 实例,请确保将其 order 属性设置为低于 DefaultServletHttpRequestHandler 的值(即 Integer.MAX_VALUE)的值,则会出现这种情况。