Spring MVC中配置静态资源处理的三种方式和区别
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处理静态资源。