我新的春天,我注意到,處理靜態資源時,有兩種方法可供選擇:?爲什麼有2種方式來處理春季靜態資源(addResourceHandlers和容器的默認servlet「)
選項1:
如果 Spring的DispatcherServlet
映射到/
與下面的代碼,這使得它的「默認的servlet」,有可能映射CER覃靜資源與RequestMapping
註釋(重寫AbstractAnnotationConfigDispatcherServletInitializer
類)春天處理程序:
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
然後,我們仍然可以使容器的「默認servlet」來處理這些靜態資源,其URL模式不屬於春天的請求映射(重寫WebMvcConfigurerAdapter
類):
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
這基本上使用servlet容器的「默認servlet」爲包羅萬象的來處理所有的靜態[R esources 錯過由Spring的DispatcherServlet
。
選項2:
(重寫WebMvcConfigurerAdapter
類)
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("*.efi").addResourceLocations("/");
}
- 爲什麼有兩個選擇呢?
- 這些方法之間的主要區別是什麼?
- 還有其他的選擇嗎?
我通常採取選項2,因爲我想堅持到春天,但我知道這不是一個強有力的理由。
一些參考與靜態資源處理:
- Serve Static Resources with Spring
- Spring Framework 4.1 - handling static web resources
- Spring MVC – How to include JS or CSS files in a JSP page
ADD 1
看來選項2提供了有關資源映射了更多的靈活性。甚至可以映射WEB-INF
文件夾內的資源。
你基本上自己回答了這個問題。選項1允許您啓用容器的默認行爲**如果您將'DispatcherServlet'映射到'\',則爲**。 – zeroflagL
@zeroflagL直到今天,我完全認識到您的評論中的大寫** IF **。謝謝。框架可能會減少我們編寫的代碼,但大大增加我們需要保持腦力的東西。 – smwikipedia