spring mvc中,DispatcherServlet核心servlet配置的url-pattern為"/",這就導致所有的請求都會經過DispatcherServlet,但是當項目訪問靜態資源時,如.html,.js,.css等文件,這些應該不需要經過核心servlet的,所以為了解決這一問題,在項目中就需要對靜態資源處理進行配置。
通常配置靜態資源處理有兩種種方式
配置
第一種:交由web容器默認的servlet處理
例如Tomcat的DefaultServlet
在xml配置文件中:
<mvc:default-servlet-handler/>
第二種:由spring mvc自己處理靜態資源
在spring3.0.4版本后,提供了mvc:resources配置
在xml配置文件中:
<!-- mapping屬性用於映射靜態資源的url --> <!-- location屬性用於指定靜態資源的相對路徑,這個路徑可以指定多個,中間用逗號隔開 --> <mvc:resources mapping="/page/**" location="/static/,/aa/"/>
在配置類中:
@Configuration /** * 報掃描,掃描有spring注解的類 */ @ComponentScan("edu.nf.ch11") /** * 啟用mvc注解處理器 */ @EnableWebMvc /** * 擴展spring mvc配置,需要實現WebMvcConfigurer接口 */ public class SpringConfig implements WebMvcConfigurer { /* 配置靜態資源處理的兩種方式,兩種方式任選其一 */ /** * 方式一:使用默認servlet處理靜態資源 */ @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { //啟用默認servlet支持 configurer.enable(); } /** * 方式二:使用spring mvc處理靜態資源 * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/page/**").addResourceLocations("/static/"); } }
通俗來說,使用mvc:default-servlet-handler是將請求的靜態資源經由spring mvc交回web容器本身默認的servlet去處理,而mvc:resources就是直接由spring mvc處理靜態資源。