由于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
服务于资源位置的资源。
但是,如果覆盖configureDefaultServletHandling()
并启用它,则实质上是要求默认servlet(映射到“/”)来为资源提供服务。如果您正在使用此功能,您需要在这里处理几件事。从docs报价 -
这使得映射的DispatcherServlet为“/”(因此重写容器的默认的Servlet的映射),同时还允许静态资源请求通过容器的默认的Servlet处理。它使用“/ **”的URL映射和相对于其他URL映射的最低优先级来配置DefaultServletHttpRequestHandler。
该处理程序将把所有请求转发给默认的Servlet。因此,重要的是它保持最后的所有其他URL HandlerMappings的顺序。如果您使用或者如果您正在设置自己的自定义HandlerMapping实例,则情况会是这样,请务必将其顺序属性设置为低于DefaultServletHttpRequestHandler(即Integer.MAX_VALUE)的值。
它告诉Spring使用容器的默认servlet来处理某些请求,比如静态资源。 https://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html#what。这是一个性能优化 – 2015-04-01 17:13:13
你在javadoc中不了解什么:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.html 。你有静态资源吗?他们如何处理? – 2015-04-01 17:29:34
是的,我有静态资源,这种方法'@Override \t public void addResourceHandlers(ResourceHandlerRegistry registry){ \t \t registry.addResourceHandler(“/ assets/**”)。addResourceLocations( “/资源/引导/”); \t}' – Vercryger 2015-04-01 17:35:55