由於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