静态资源目录
目录:
在主类的相同目录下,创建/static (or /public or /resources or /META-INF/resources这些包,然后把静态资源,图片,js这些,直接放入这些包中,就能被SpringBoot识别。
访问:
直接,当前项目根路径/ + 静态资源名,就能访问。
访问原理:
SpringBoot是使用,静态映射/**,来访问静态资源的,可以看到,底层原理就是解析静态资源包下的所有类型的文件。那么问题来了,如果Controller中配置了和静态资源中名称相同的控制器访问路径的话,会产生什么结果?
相同名称控制器问题:
答案就是,会先解析控制器,如果控制器中找不到,再解析静态资源。
常见问题:
因为web项目肯定是要配置过滤器的,那么,过滤器一般只是用来过滤控制器的,既然会先访问控制器再访问静态资源,那么,过滤器是有可能把静态资源过滤掉的。所以,为了避免这种情况,通常,静态资源的路访问路径并不使用根路径,也就是说,静态资源存放位置仍然可以不变,但是,可以自定义静态资源访问路径,这样,就能使静态资源绕过过滤器。
改变默认的静态资源访问路径:
这里用yaml格式,在静态资源访问路径前加上/res/
spring:
mvc:
static-path-pattern: /res/**
如果想改变SpringBoot识别静态资源的路径不是类路径,可以设置:
classpath表示类路径,类路径下的haha文件下,是新设置的SpringBoot识别静态资源的路径。
spring:
resources:
static-locations: [classpath:/haha/]
最后了解一下:
webjars
就是可以把前端资源以jar包形式导入项目。
欢迎页支持
两种欢迎页支持方式,第一,静态资源路径下 index.html,第二,用controller处理/index。
注意:
可以配置静态资源路径
但是不可以配置静态资源的访问前缀。否则导致 index.html不能被默认访问
spring:
# mvc:
# static-path-pattern: /res/** 这个会导致welcome page功能失效
resources:
static-locations: [classpath:/haha/]
为什么不可以使用静态资源访问前缀,是因为源码中写死了:/**
if (welcomePage.isPresent() && "/**".equals(staticPathPattern)) {
//要用欢迎页功能,必须是/**
logger.info("Adding welcome page: " + welcomePage.get());
setRootViewName("forward:index.html");
}
自定义 Favicon
favicon就是就是页面左上角的小图标。
favicon.ico 放在静态资源目录下即可。
但是,和上面欢迎页相同,也是可以配置静态资源路径,但是不可以配置静态资源的访问前缀。