【SpringBoot 2】(六)配置文件 web开发相关

写在前面在这里插入图片描述🛫更多知识总结见SpringBoot 2专栏
🚕本篇知识点总结自尚硅谷雷神的视频
🚒博主对于该知识尚在学习阶段
🚄如果发现存在问题请毫不吝啬的指出
🚀🚀扎哇太枣糕的博客首页🚀🚀

文章目录

  • 1 配置文件
    • 1.1 yaml文件
      • 1.1.1 基本语法
      • 1.1.2 数据格式
    • 1.2 数据绑定时关键字提示
  • 2 web开发
    • 2.1 静态资源的存放与访问
    • 2.2 webjars
    • 2.3 web小技巧
      • 2.3.1 index页面
      • 2.3.2 网页小图标
    • 2.4 web场景源码浅析

1 配置文件

  之前说过,配置文件大致分两种类型:properties、yaml。其中properties是最常规的配置文件类型:使用键值对等号的格式来对各种参数进行配置,后缀为.properties,在这里就不过多的进行赘述了。下面说一下yaml文件。

1.1 yaml文件

   YAML全称YAML Ain’t(isn’t) Markup Language,是一种直观的能够被电脑识别的数据序列化格式,YAML以数据为核心,比传统的xml方式更加简洁。体现在书写的格式简洁,表达的层级明显,非常适合用来做以数据为中心的配置文件。yaml文件的后缀为.yml或者.yaml

1.1.1 基本语法

  • 使用K: V进行键值映射,V前要有空格作为分隔符
  • 区分大小写
  • 使用缩进表示层级关系
  • 语法层面使用缩进不能用Tab键,要手敲空格。空格数不重要,只要是相同的空格数就代表相同的层级关系,所以相同层级的缩进空格要相同。但是实际操作的时候还是使用tab键,不会出现问题
  • 注解使用#字符

1.1.2 数据格式

  yaml文件的数据格式可以使用如下的的格式约束,用注解注掉的就是这种类型的行内写法,可以自行选择习惯的形式进行使用。其中注意的是字符串类型的数据可以不用引号引起来,但是要是使用引号的话,单引号会将转义字符作为字符串进行输出,但是双引号会将转义字符转义之后输出,比如\n单引号就是\n双引号就是换号符。
在这里插入图片描述

1.2 数据绑定时关键字提示

  在使用yaml配置文件进行配置的时候并不会进行代码补全的相关提示,这样不仅会大大降低代码书写效率,还会增加出错的概率。于是,现在就有一种方法:在项目中加入配置处理器,即可实现编写yaml文件的时候进行关键字提示。方法如下:

第一步: 导入相关依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

第二步: 重启项目
  点击运行或者重启按钮,重启一下该SpringBoot项目
第三步: 测试在这里插入图片描述
第四步: 在pom.xml文件中添加代码
  即在打jar包的时候不将配置处理器打入jar包,否则会降低项目的效率
在这里插入图片描述

2 web开发

2.1 静态资源的存放与访问

  静态资源可以理解为前端的固定页面,这里面包含HTML、CSS、JS、图片等等,不需要查数据库也不需要程序处理,直接就能够显示的页面。

存放路径:
  所有的静态资源在编程的时候都放在类路径下的一个文件夹里,文件夹默认匹配以下四种命名的任意一种: staticpublicresources/META-INF/resources

资源访问方式:
  将项目启动开之后,使用当前项目根路径/ + 静态资源名 对静态资源进行访问。所有的静态资源映射地址是/**
  当静态资源和controller请求重名的时候,资源解析器会首先去找该名称的Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器查找静态资源,静态资源也找不到则响应404页面

自定义存放路径、访问方式:
  对配置文件的 spring. web.resources.static-locations配置项进行修改,可以改变默认的静态资源存储路径。在这里插入图片描述
对配置文件的 spring.mvc.static-path-pattern配置项进行修改,可以使得在访问时拥有指定前缀的请求才会访问静态资源。如下图,只有使用 /res前缀 + 静态资源名访问的时候才会访问到相应的静态资源在这里插入图片描述

2.2 webjars

  webjars就是将前端所需要的技术jar(比如jquery)使用依赖进行导入,webjars的官方文档就是展示jar对应的依赖,使用的时候直接复制到pom.xml文件即可。webjars的官方文档:https://www.webjars.org/

2.3 web小技巧

2.3.1 index页面

  不管是默认的还是自定义的静态资源路径,只要在下面创建一个index.html文件,这个页面就将会被当做项目的欢迎页面,也就是说访问localhost: 端口号的时候就会访问到index.html页面。但是需要注意的是,不能自定义静态资源的访问方式,否则就会导致上述效果失效。

2.3.2 网页小图标

  不管是默认的还是自定义的静态资源路径,只要在下面添加一个命名为favicon.ico的图片,即可将该图片设置成网页的小图标。同时需要注意的是,不能自定义静态资源的访问方式,否则就会导致上述效果失效。在这里插入图片描述

2.4 web场景源码浅析

生效自动配置类:
  SpringBoot启动的时候默认加载xxxAutoConfiguration类(自动配置类)是相关场景生效,SpringMVC功能的自动配置类是 WebMvcAutoConfiguration

配置绑定:
  @EnableConfigurationProperties注解将配置文件的相关属性和xxx配置类进行了绑定,可以用于更改默认的配置信息。而通过分析源码可知在WebMvcAutoConfiguration自动配置类里的WebMvcAutoConfigurationAdapter静态类上有如下注解,注解参数中有两个配置类,其中配置类与配置文件中的属性绑定关系如下:WebMvcProperties.class --> spring.mvc WebProperties.class --> spring.web

@EnableConfigurationProperties({WebMvcProperties.class, WebProperties.class})

源码中资源处理器的解析:
  在SpringBoot的源码中有一个规则:有参构造器所有参数的值都会从容器中拿,于是在WebMvcAutoConfigurationAdapter静态类里的有参构造器中,所有的参数都将直接从容器中获取。

//ResourceProperties resourceProperties --> 获取和spring.resources绑定的所有的值的对象
//WebMvcProperties mvcProperties --> 获取和spring.mvc绑定的所有的值的对象
//ListableBeanFactory beanFactory --> Spring的beanFactory
//HttpMessageConverters --> 找到所有的HttpMessageConverters
//ResourceHandlerRegistrationCustomizer --> 找到资源处理器的自定义(重点解析)
//DispatcherServletPath -->  找到资源的路径
//ServletRegistrationBean --> 给应用注册Servlet、Filter....
public WebMvcAutoConfigurationAdapter(ResourceProperties resourceProperties, WebMvcProperties mvcProperties,ListableBeanFactory beanFactory, ObjectProvider<HttpMessageConverters> messageConvertersProvider,ObjectProvider<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizerProvider,ObjectProvider<DispatcherServletPath> dispatcherServletPath,ObjectProvider<ServletRegistrationBean<?>> servletRegistrations) {this.resourceProperties = resourceProperties;this.mvcProperties = mvcProperties;this.beanFactory = beanFactory;this.messageConvertersProvider = messageConvertersProvider;this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizerProvider.getIfAvailable();this.dispatcherServletPath = dispatcherServletPath;this.servletRegistrations = servletRegistrations;
}

  通过对WebMvcAutoConfigurationAdapter静态类里的addResourceHandlers方法解析,得知资源解析器中资源处理的默认规则

public void addResourceHandlers(ResourceHandlerRegistry registry) {// 判断resource.add-mappings的值true/false(默认为true,可以在配置文件修改配置项)if (!this.resourceProperties.isAddMappings()) {// resource.add-mappings的值为false,则禁用所有的静态资源的访问规则,debug日志输出下面这句话logger.debug("Default resource handling disabled");return;}// resource.add-mappings的值true的话,定义规则// 定义缓存的相关配置Duration cachePeriod = this.resourceProperties.getCache().getPeriod();CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();// 定义webjars的资源存储规则和缓存时间if (!registry.hasMappingForPattern("/webjars/**")) {customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/").setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}// 定义静态资源的访问规则// this.mvcProperties.getStaticPathPattern() --> 获取静态资源的访问方式,默认是\/**String staticPathPattern = this.mvcProperties.getStaticPathPattern();if (!registry.hasMappingForPattern(staticPathPattern)) {customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)// getStaticLocations()方法中.addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}
}

源码中欢迎页的解析:

@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext, FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {// 下面 welcomePageHandlerMapping 的有参函数在下面图片WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern());welcomePageHandlerMapping.setInterceptors(this.getInterceptors(mvcConversionService, mvcResourceUrlProvider));welcomePageHandlerMapping.setCorsConfigurations(this.getCorsConfigurations());return welcomePageHandlerMapping;
}

  下图解释了为什么:自定义静态资源的访问方式会导致欢迎页无法起到作用。SpringBoot的源码中已经将这部分条件写死了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

deepl windows_推荐一个为程序员深度开发的翻译插件DeepL

DeepL深度翻译器DeepL一个程序员的翻译神器&#xff0c;可能有人要问&#xff0c;市面上这么多的翻译插件这么多&#xff0c;我为毛要用你的。首先这个翻译神器可以实现多个翻译引擎的翻译&#xff0c;目前支持有道和google&#xff0c;下一步我会把最近特别流行的翻译软件Deep…

再次携号转网_陕西通信管理局:对移动公司拒绝对用户提供携号转网服务的违法行为处罚!...

据陕西省通信管理局网站11月25日消息&#xff0c;陕西省通信管理局25日发出《关于中国移动西安分公司无正当理由拒绝对用户提供携号转网服务调查处理情况的通报》称&#xff0c;近期&#xff0c;省通信管理局对中国移动西安分公司(以下简称西安移动)无正当理由拒绝对用户提供携…

【SpringBoot 2】(七)请求处理——映射 常用注解 方法参数的小技巧

写在前面&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

北方人思想为什么落后_广西人为什么很少到北方打工?

广西虽然山青水秀&#xff0c;环境优美&#xff0c;但目前还是个经济欠发达的地区&#xff0c;很多人在本地很难找到合适的工作&#xff0c;所以纷纷选择外出打工了&#xff0c;包括我自己。在广西外出打工的人群当中&#xff0c;绝大部分人都去了广东&#xff0c;当然&#xf…

刷网络课_网络营销实践心得—刘荟萌

一、实践时间2020.9.1~2020.12.25二、实践内容1、实践资源准备&#xff1a;实践平台账号注册、了解相关网站的使用方法。2、认识网络营销系统&#xff1a;企业网络营销信息源类别及传递渠道调查。3、信息源构建&#xff1a;微信公众号运营、新媒体平台运营(微博、博客)4、网络推…

【SpringBoot 2】(八)数据响应 页面响应

写在前面&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

2020年最快的dns_2020年哪里换旅行证最快取证?需要几天?

关注我的都知道了很多的实用攻略你还在等什么~美妈不论去哪个地方更换旅行证&#xff0c;都喜欢问“这个地方是否可以加急&#xff1f;”“最快几天可以拿到新的旅行证&#xff1f;”今天就来整理一下2020年各地换证需要几天&#xff0c;是否可以加急。"目前更换旅行证有两…

语句拼接_Linux 进阶语句

日常工作需要用到&#xff0c;shell语句用于分析定位生产问题&#xff0c;本次做个记录# 将日志先拷贝到当前目录cp /tmp/nginx.log .本次目标是&#xff1a; 找出log中的404 500的报错#使用管道取出相关日志less nginx.log 通过/ 查询得知 状态码处于第9个字段#使用 awk 筛选出…

【SpringBoot 2】(九)异常处理 web原生组件的注入

写在前面&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

项目管理最佳实践方法_项目管理最佳实践,企业如何进行有效的项目管理

前言&#xff1a;企业在划分项目时&#xff0c;可按照项目的复杂程度、管理范围等将项目分为三个级别&#xff0c;分别是企业级、部门级和小组级&#xff08;与目标划分原则相同&#xff09;&#xff0c;然后将每一级的目标与项目对应起来。我们知道&#xff0c;企业制定的目标…

【SpringBoot 2】(十)数据库相关

写在前面&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

【SpringBoot 2】(十一)单元测试JUnit 5 指标监控

写在前面&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

多个containers 共用一个pvc_2020阜新PVC-UH市政管厂家-烟台塑胶

2020阜新PVC-UH市政管厂家烟台金沃泉塑胶有限公司主要产品PVC-U、PVC-M、PVC-UH聚氯乙烯给给水管材、HDPE高密度聚乙烯给水管材、CPVC氯化聚氯乙烯、MPP高压电力电缆护套管、PERT-Ⅱ型热力管道、高分子托辊管、水处理膜壳管。公司为电网、南方电网、电建集团、建筑集团、五矿集…

【SpringBoot 2】(十二) profile功能 自定义starter

写在前面&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

pb 怎么判断是 小数_考试90分以上的孩子是怎么学数学的?听听老师怎么说?

一二年级&#xff0c;考试上九十分很轻松。但是&#xff0c;不少小朋友一上三年级&#xff0c;成绩就落下来了。那么&#xff0c;我们来看看三年级起&#xff0c;考试还能够保持在90分以上的孩子是怎么学习数学的吧&#xff01;第一&#xff0c;计算能力过关通过这两张图片的对…

快速上手Mybatis-Plus 入门案例

写在前面&#x1f6eb;更多知识总结见Mybatis-Plus专栏 &#x1f695;内容总结自尚硅谷杨博超老师的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

黑苹果 选择语言 点不了_什么是天然的“黑钻”?—科普贴

天然黑钻也被成为“碳酸氢”&#xff0c;具有与白钻相同的化学成分&#xff0c;然而黑钻石的晶体结构是不同的&#xff0c;这意味着它们由许多小晶体组成&#xff0c;它们以随机的形式粘在一起&#xff0c;而不是一个具有可识别自然线的固体锥形。天然黑钻石有极高的含物&#…

sim卡没坏但苹果手机无服务_解决手机插SIM卡后都显示“无SIM卡”的故障问题

故障现象顾客描述手机插SIM卡后都显示“无SIM卡”。维修过程引起插入SIM卡却显示“无SIM卡”的故障&#xff0c;除了可能是SIM卡座的供电、时钟、复位及SIM卡插入检测信号不正常导致外&#xff0c;还有可能是基带不正常导致的。插上手机卡&#xff0c;左上角提示“无SIM卡”&am…

Mybatis-Plus实现简单的增删改查 实体类上的注解

写在前面&#x1f6eb;更多知识总结见Mybatis-Plus专栏 &#x1f695;内容总结自尚硅谷杨博超老师的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680;…

conda失败说没有写权限_爱情中,为什么男生表白失败,女生还说可以继续做朋友,想过没有...

在爱情中&#xff0c;不是每个男生都是幸运的&#xff0c;也不是每次的表白都是如你所愿的。有成功总有失败&#xff0c;成功是喜悦的&#xff0c;但是失败却是痛苦的。不过有的时候男生和女生表白以后&#xff0c;女生对男生说了这样的一段&#xff0c;其实我希望以后我们还是…