Springboot学习02-webjars和静态资源映射规则
Springboot学习01-webjars和静态资源映射规则
前言
1-以前我们在IDEA中创建一个项目,添加web依赖包,我们现在是一个web应用,应该在man目录下面有一个webapp文件夹,将所有的页面都放在这里,这是我们以前的做法。
2-现在我们创建的这个项目中,没有这个webapp目录,但是SpringBoot给我们做了规定。在SpringBoot中对SpringMVC的相关配置都在 WebMvcAutoConfiguration 这个类中做了规定。
3-本文主要内容
- /webjars/** ,在 classpath:/META-INF/resources/webjars/ 找资源
- "/**" 访问当前项目的任何资源,都去(静态资源的文件夹)找映射
- 欢迎页; 静态资源文件夹下的所有index.html页面;被"/**"映射;
- favicon.ico :所有的 **/favicon.ico 都是在静态资源文件下找;
正文
1-/webjars/** ,在 classpath:/META-INF/resources/webjars/ 找资源
1-1-源码分析
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ResourceLoaderAware {
private final ResourceProperties resourceProperties;
//1-配置静态访问资源
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
} else {
Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
if (!registry.hasMappingForPattern("/webjars/**")) {
this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"})
.addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"})
.setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
//静态资源文件夹映射
if (!registry.hasMappingForPattern(staticPathPattern)) {
this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern})
.addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))
.setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
}
}
}
1-2-webjars:以jar包的方式引入静态资源,可以去http://www.webjars.org/ 这个网站选择自己的静态资源
1-2-1-去webjars官网获取自己需要的maven依赖

1-2-2-将maven依赖导入行pom.xml文件

1-2-3-启动项目,测试是否可以获取jquery资源(示例路径:http://localhost:8080/webjars/jquery/3.3.1/jquery.js)

2-自定义静态文件的映射路径(意思为:我们把静态文件放在这些路径下面,就会被加载到)
2-1-默认映射路径:"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/";优先级顺序为:META-INF/resources > resources > static > public
2-2-默认映射路径,源码出处
//ResourceProperties类
@ConfigurationProperties(
prefix = "spring.resources",//如果要自己配置路径,在配资前缀为"spring.resources"
ignoreUnknownFields = false
)
public class ResourceProperties {
//声明了默认classpath资源路径为:{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"}
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"}; }
2-3-应用示例(http://localhost:8080/demo.jpg指的是依次去"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"去找demo.jpg图片)

2-4-修改默认静态资源路径,方法一:配置spring.resources.static-locations参数
#在application.properities中进行配置,多个路径可以用逗号隔开
spring.resources.static-locations=classpath:/myresources/

2-5-修改默认静态资源路径,方法二:重写WebMvcConfigurerAdapter 中的addResourceHandlers方法,自定义映射路径
2-5-1-重写WebMvcConfigurerAdapter 中的addResourceHandlers方法,自定义映射路径
@Configuration
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
/**
* 配置静态访问资源
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/mypath/**").addResourceLocations("classpath:/myresources/");
super.addResourceHandlers(registry);
}
}
2-5-2-应用示例

3-欢迎页面(当浏览器)
3-1-源码分析
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ResourceLoaderAware {
private final ResourceProperties resourceProperties;
//1-指定this.getWelcomePage(),见2
@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext) {
return new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern());
}
//2-去getIndexHtml()获取欢迎页面路径,见3
private Optional<Resource> getWelcomePage() {
String[] locations = getResourceLocations(this.resourceProperties.getStaticLocations());
return Arrays.stream(locations).map(this::getIndexHtml).filter(this::isReadable).findFirst();
}
//3-默认欢迎页面在location(映射路径) + "index.html"
private Resource getIndexHtml(String location) {
return this.resourceLoader.getResource(location + "index.html");
}
}
3-2-应用示例

4-favicon.ico
4-1-所有的 **/favicon.ico 都是在静态资源文件下找
4-1-应用示例

参看资料:
1-https://blog.csdn.net/baidu_36216018/article/details/79699084
2-https://www.cnblogs.com/java-synchronized/p/7091723.html
3-https://blog.csdn.net/javareact/article/details/77981769
Springboot学习02-webjars和静态资源映射规则的更多相关文章
- 尚硅谷springboot学习21-web开发-处理静态资源
SpringBoot对静态资源的映射规则 @ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFi ...
- springboot静态资源映射规则
一.所有/webjars/**的请求,都会去classpath:/META-INF/resources/webjars/下的目录去找资源. 二.访问/**,即访问任何资源,如果没有controller ...
- SpringBoot学习5:访问静态资源
springboot默认从项目的resources里面的static目录下或者webapp目录下访问静态资源 方式一:在resources下新建static文件(文件名必须是static) 在浏览器中 ...
- Spring Boot笔记五: Web开发之Webjar和静态资源映射规则
目录 Webjar /** 访问当前项目的任何资源 欢迎页 标签页图标 Webjar 开始讲到Spring Boot的Web开发了,先介绍Webjar,这个其实就是把一些前端资源以jar包的形式导入到 ...
- SpringBoot之Web开发——webjars&静态资源映射规则
在webjars中找到需要引入的Maven依赖,添加到pom.xml中,即可自动导入相关依赖.
- SpringBoot:静态资源映射、定制404、配置icon
目录 静态资源映射规则 定制首页 定制错误页面 配置 icon 静态资源映射规则.定制首页.定制404页面.配置网站的图标 静态资源映射规则 SpringBoot中对于静态资源(css,js,img. ...
- springboot 2.X 在访问静态资源的的时候出现404的问题
通过idea快速搭建一个springboot项目: springboot版本2.1.6 在网上看的资料,springboot静态资源访问如下: "classpath:/META‐INF/re ...
- SpringBoot 配置静态资源映射
SpringBoot 配置静态资源映射 (嵌入式servlet容器)先决知识 request.getSession().getServletContext().getRealPath("/& ...
- springboot静态资源映射
springboot静态资源映射 WebMvcAutoConfiguration @Override public void addResourceHandlers(ResourceHandlerRe ...
随机推荐
- day08-MySQl创建用户和授权
权限管理 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete.grant等操作.那么一般情况DBA工程师会创建一个用户和密码,让你去连接数 ...
- Linux 删除指定时间的文件
find /root/demo -mmin +10 -type f -name '*.png' -exec rm -rf {} \; find 相关:http://man.linuxde.net/fi ...
- 二、消息队列之如何在C#中使用RabbitMQ(转载)
二.消息队列之如何在C#中使用RabbitMQ 1.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源 ...
- 【378】python any() and all()
Reference: [1] Python all() - Python Standard Library [2] Python any() - Python Standard Library all ...
- 为什么虚拟DOM更优胜一筹
注意: 虚拟DOM只是实现MVVM的一种方案,或者说是视图更新的一种策略.没有虚拟DOM比MVVM更好一说. 我们回顾传统MVC框架,如backbone,它是将某个模板编译成模板函数,需要更新时,是自 ...
- FMS Dev Guide学习笔记(SharedBall)
一.开发交互式的媒体应用程序1.共享对象(Shared objects) ----SharedBall example 这个SharedBall example创建了一个临时的远程共享对象.类似于多人 ...
- Linux基本操作指令
Linux操作指令 到达当前用户目录:cd ~ 获得管理员权限执行:sudo 解压缩:tar -zxf XXX.tgz 安装包:dpkg -i XXX.deb 通过链接下载文件:wget http: ...
- SSH 登录时出现如下错误:Disconnected:No supported authentication methods available
SSH 登录时出现如下错误:Disconnected:No supported authentication methods available 更新时间:2017-06-07 13:26:11 ...
- float double 如何存储计算2 (这个写的也不错)
目前java遵照IEEE制定的浮点数表示法来进行float,double运算.这种结构是一种科学计数法,用符号.指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号. 我 ...
- mongodb 副本集部署
1.安装三节点linux环境:196.168.1.111,196.168.1.112,192.168.1.113(三节点可彼此ping通) 2.三节点安装mongodb,参考https://blog. ...