2015-04-01 739 views
11

我想了解Spring MVC中如何做的工作,我也沒有在我Spring的配置文件理解這部分代碼:如果這是我的WebContextApplicationconfigureDefaultServletHandling的含義是什麼?

@Override 
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
    configurer.enable(); 
} 

,一切工作正常時,它的不目前一切工作正常。那麼這種方法的目的是什麼?我的WebContextApplication類應該有這種方法嗎?爲什麼?

+1

它告訴Spring使用容器的默認servlet來處理某些請求,比如靜態資源。 https://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html#what。這是一個性能優化 – 2015-04-01 17:13:13

+1

你在javadoc中不瞭解什麼:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.html 。你有靜態資源嗎?他們如何處理? – 2015-04-01 17:29:34

+1

是的,我有靜態資源,這種方法'@Override \t public void addResourceHandlers(ResourceHandlerRegistry registry){ \t \t registry.addResourceHandler(「/ assets/**」)。addResourceLocations( 「/資源/引導/」); \t}' – Vercryger 2015-04-01 17:35:55

回答

6

由於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)的值。

+1

非常感謝! – Vercryger 2016-03-05 22:12:43