首页 > 其他分享 >springboot之web开发之webjars&静态资源映射规则

springboot之web开发之webjars&静态资源映射规则

时间:2022-11-30 18:36:19浏览次数:55  
标签:web webjars springboot resourceProperties staticLocations new public String


一、使用springboot

1、创建springboot应用,选中我们需要的模块

2、springboot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来

3、自己编写业务代码

自动配置原理?

这个场景springboot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?。。。

xxxAutoConfiguration:帮我们给容器中自动配置组件

xxxProperties:配置类中封装配置文件的内容

二、springboot对静态资源的映射规则

1、所有/webjars/**,都去classpath:/META-INF/resources/webjars/找资源

webjars:以jar包的方式引入静态资源

 

ctrl+n/两次shift找到WebMvcAutoConfiguration类

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(WebMvcAutoConfiguration.getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
}

}
}

pom.xml中添加

<!--引入jquery的webjar-->在访问的时候只需要写webjars下面资源的名称即可
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.4.1</version>
</dependency>

springboot之web开发之webjars&静态资源映射规则_mvc

将hide。。。的勾去了

springboot之web开发之webjars&静态资源映射规则_mvc_02

springboot之web开发之webjars&静态资源映射规则_mvc_03

重启项目,

springboot之web开发之webjars&静态资源映射规则_jar_04

​@ConfigurationProperties(
prefix = "spring.resources",
ignoreUnknownFields = false
)
public class ResourceProperties {//可以设置和静态资源有关的参数,缓存时间等​

2、"/**" 访问当前项目的任何资源(静态资源的文件夹)

"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
"/" :当前项目的根路径

resources是类路径的根目录

springboot之web开发之webjars&静态资源映射规则_ico_05

springboot之web开发之webjars&静态资源映射规则_ico_06

WebMvcAutoConfiguration类addResourceHandlers方法里的staticPathPattern参数跟踪找到WebMvcProperties类里的

private String staticPathPattern = "/**";
addResourceHandlers方法里addResourceLocations资源的位置找到ResourceProperties里的staticLocations
CLASSPATH_RESOURCE_LOCATIONS
public void setStaticLocations(String[] staticLocations) {
this.staticLocations = appendSlashIfNecessary(staticLocations);
}

private String[] appendSlashIfNecessary(String[] staticLocations) {
String[] normalized = new String[staticLocations.length];
for (int i = 0; i < staticLocations.length; i++) {
String location = staticLocations[i];
normalized[i] = location.endsWith("/") ? location : location + "/";
}
return normalized;
}

localhost:8080/abc===去静态资源文件夹下找abc

springboot之web开发之webjars&静态资源映射规则_mvc_07

springboot之web开发之webjars&静态资源映射规则_mvc_08

​3、欢迎页,静态资源文件夹下的所有index.html页面,被"/**"映射​​​​localhost:8080/   找index.html页面​

 

springboot之web开发之webjars&静态资源映射规则_ico_09

springboot之web开发之webjars&静态资源映射规则_ico_10

 

​//配置欢迎页映射​​​​@Bean​​​​public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext) {​

WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(
new TemplateAvailabilityProviders(applicationContext), applicationContext, getWelcomePage(),
this.mvcProperties.getStaticPathPattern());
welcomePageHandlerMapping.setInterceptors(getInterceptors());
return welcomePageHandlerMapping;
}
WebMvcAutoConfiguration类
private Resource getIndexHtml(String location) {
return this.resourceLoader.getResource(location + "index.html");
}

​4、所有的**/favicon.ico都是在静态资源文件下找​

 

springboot之web开发之webjars&静态资源映射规则_ico_11

springboot之web开发之webjars&静态资源映射规则_ico_12

 

 

//配置喜欢的图标
@Configuration
@ConditionalOnProperty(value = "spring.mvc.favicon.enabled", matchIfMissing = true)
public static class FaviconConfiguration implements ResourceLoaderAware {

private final ResourceProperties resourceProperties;

private ResourceLoader resourceLoader;

public FaviconConfiguration(ResourceProperties resourceProperties) {
this.resourceProperties = resourceProperties;
}

@Override
public void setResourceLoader(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}

@Bean
public SimpleUrlHandlerMapping faviconHandlerMapping() {
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
mapping.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
mapping.setUrlMap(Collections.singletonMap("**/favicon.ico", faviconRequestHandler()));
return mapping;
}

@Bean
public ResourceHttpRequestHandler faviconRequestHandler() {
ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler();
requestHandler.setLocations(resolveFaviconLocations());
return requestHandler;
}

private List<Resource> resolveFaviconLocations() {
String[] staticLocations = getResourceLocations(this.resourceProperties.getStaticLocations());
List<Resource> locations = new ArrayList<>(staticLocations.length + 1);
Arrays.stream(staticLocations).map(this.resourceLoader::getResource).forEach(locations::add);
locations.add(new ClassPathResource("/"));
return Collections.unmodifiableList(locations);
}

}
可以通过配置文件修改静态文件夹的路径

springboot之web开发之webjars&静态资源映射规则_mvc_13

 

标签:web,webjars,springboot,resourceProperties,staticLocations,new,public,String
From: https://blog.51cto.com/u_12528551/5900111

相关文章

  • springboot之restfulcrud--员工列表
    URI:/资源名称/资源标识 +HTTP请求方式区分对资源CRUD操作 普通CRUD(URI来区分操作)RestfulCRUD查询getEmpemp---GET添加addEmp?xxxemp---POST修改updateEmp?id=xxx&xxx......
  • 2021SWPUCTF-WEB(一)
    gift_F12给了一个网站,题目提示是F12,就F12找一下​WLLMCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft}jicao一个代码,逻辑很简单​大概就是通过POST的方式传一个参数id=w......
  • Springboot实现HTML表单from简单的接收信息
    HTML<from>元素from可向Web服务器提交请求普遍格式:<fromaction="服务器地址"method="请求方式"enctype="数据格式"><inputtype="submit"value="Test按......
  • maven项目搭建web的war包,并配置到tomcat中
    1.新建项目,File→New→Project2.给项目添加一个Web模块3.在Web上,点击createartifact生成artifact4.给生成的artifact打包Artifacts:重要的一环,一个modu......
  • datax-web同步mysql数据中文乱码问题
    在同步数据的时候中文乱码首先看看俩数据库字符集是否相同是不是utf8如果确认没有问题之后打开刚才的任务在连接mysql的后面加上 ?useUnicode=true&characterEncoding=u......
  • Web服务器1-socket编程
    基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:time服务器的客户端服务器,提交程序运行截图echo服务器的客户端服务器,提交程序运行截图,服务器把客户端传进来......
  • Angular 如何修改webpack配置(配置loader)
    1.修改AngularCLIwebpack配置1.1安装@angular-builders/custom-webpacknpminstall-D@angular-builders/custom-webpack1.2新建webpack配置文件extra-webpac......
  • SpringBoot Mongodb实战整合
    目录找出数组中,具有qid=1并且reorderFlag=0的记录找出数组中,qid=1或者reorderFlag=0的记录新增数组数据修改数组数据,根据条件批量修改嵌套数组的字段值删除数组数据......
  • SpringBoot 如何实现异步编程
    https://blog.csdn.net/m0_60028455/article/details/121650608 首先我们来看看在Spring中为什么要使用异步编程,它能解决什么问题?为什么要用异步框架,它解决什么问题?在......
  • web实验四(二)
    web实验四(二)基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:1.Web服务器的客户端服务器,提交程序运行截图2.实现GET即可,请求,响应要符合HTTP协议规范3.服......