一、静态资源的访问
Spring Boot 默认提供静态资源的处理
1.静态资源的默认支持
springboot提供的静态资源映射如下:
分别是:
classpath:/META-INF/reasources
classpath:/resources
classpath:/static
classpath:/public
其访问优先级从高到低一次是:/META-INF/reasources>resources>static>public
启动项目,访问http://localhost:8080/,可验证其优先级。
可通过如下方式设置其访问路径,如设置为/bj/**,则访问路径为http://localhost:8080/bj/;及资源路径
# 设置访问路径默认值为 /**
spring.mvc.static-path-pattern=
# 默认值为 classpath:/META-NF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开
2.静态资源的自定义配置
若spring boot提供的默认配置不能满足需求,可以通过:
1).完全自定义的配置(无需springboot提供的spring mvc的默认配置),可以通过一个配置类添加@EnableWebMvc来实现完全自己控制的MVC控制。容易导致所有URL访问时返回 404 错误。
2).默认与自定义配置共存:可以通过定义一个配置类并继承WebMvcConfigurerAdapter。(或实现WebMvcConfigurer接口,只是需要实现该接口的所有方法,WebMvcConfigurerAdapter是该接口的一个实现类,只需要重写对应的方法即可增加额外的配置)。
注意:spring boot2.0之后该WebMvcConfigurerAdapter类已经废弃,需要使用WebMvcConfigurationSuppot类,但使用该类会屏蔽Spring Boot的@EnableAutoConfiguration中的设置,即application.properties中添加配置的映射配置没有启动。此时需在该实现类中重写映射信息,即重写方法addViewControllers。
接口常用方法有:
a.自定义资源映射addResourceHandlers
@Configuration
public class MyWebConfig extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
//配置自定义静态资源映射路径,即对外暴露的访问路径
registry.addResourceHandler("/bj/**")
//配置自定义静态资源存储目录,可为项目中路径("classpath:/bj/")或外部路径("file:e:/bj/")
.addResourceLocations("classpath:/bj/");
super.addViewControllers(registry);
}
}
在浏览器中访问,可以查看到该图片信息。
此时在访问http://localhost:8080/,则报错
b.页面跳转addViewControllers,即映射跳转信息
以前写SpringMVC的时候,如果需要访问一个页面,必须要写Controller类,然后再写一个方法跳转到页面;在springboot中,重写addViewControllers方法也可达到相同的效果。
@Configuration
public class MyWebConfig extends WebMvcConfigurationSupport {
@Override
protected void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/tologin").setViewName("login");
}
}
启动项目,访问两个路径都报错
原因在于1没有配置视图解析策略,2没有视图文件
c.拦截器addInterceptors
i:创建自定义拦截器类,并实现接口HandlerInterceptor接口;
ii:重写addInterceptors方法,将自定义拦截器类添加到拦截链中。
二、静态资源的实现原理
通过查看WebMvcAutoConfiguration自动配置类查看添加资源映射方法addResourceHandlers()方法,可得:
1)、/webjars/**下的所有请求都去访问classpath:/META-INF/resources/webjars/下找资源;
webjars:以jar包的方式引入静态资源,参考:https://www.webjars.org
即通过https://www.webjars.org网址找到所需的静态资源(如:jQuery)所对应的依赖,将其添加到pom文件中,从而引入静态资源的jar包,其对应的资源路径即为/META-INF/resources/webjars/静态资源,访问时即可通过http://localhost:8080/webjars/静态资源名 的方式来访问。
2)./** 访问当前项目的任何路径(资源)
若没有处理过,则将会去如下路径中找对应的资源。
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/,
"/"