SpringBoot-核心技术篇

技术掌握导图

在这里插入图片描述

六个大标题↓

  • 配置文件
  • web开发
  • 数据访问
  • 单元测试
  • 指标指控
  • 原理解析

配置文件

1.文件类型

1.1、properties

同以前的properties用法

1.2、yaml

1.2.1、简介

YAML是 “YAML Ain`t Markup Language”(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML的意思其实是: “Yet Another Markup Language”(仍是一种标记语言)。
非常适合用来做以数据为中心的配置文件

1.2.2、基本语法

  • key:value; kv之间有空格
  • 大小写敏感
  • 使用缩写表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释
  • ''与""表示字符串内容 会被 转义/不转义

1.2.3、数据类型

  • 字面量:单个的、不可再分的值。date、boolean、string、number、null
k: v
  • 对象:键值对的集合。map、hash、set、object
行内写法: k: {k1:v1,k2:v2,k3:v3}
#或
k :
	k1: v1
	k2: v2
	k3: v3
  • 数组:一组按次序排列的值。array、list、queue
行内写法: k: [v1,v2,v3]
#或者
k:
	- v1
	- v2
	- v3

码笔的,如果有报错下面情况的,可以这样解决:

Error:(3, 51) java: 无法访问
org.springframework.boot.context.properties.Configura
tionProperties   错误的类文件: /D:/maven-
repo/org/springframework/boot/spring-
boot/3.0.4/spring-boot-3.0.4.jar!/org/spr

上面意思可能就是SpringBoot或Java的版本太高了,我们可以修改Maven设置和POM文件来解决↓
在这里插入图片描述
在这里插入图片描述

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.atguigu.boot</groupId>
    <artifactId>boot-01-helloworld-2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>boot-01-helloworld-2</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>

回到正题,下面是Yaml的语法和使用展示
yaml文件内容↓
创建的方式则是直接新建一个File就行,输入application.yaml。
而SpringBoot的application.properties也是

person:
  userName: zhangsan
  boss: true
  birth: 2019/12/9
  age: 18
#  interests: [唱,跳,篮球,music]
  interests:
    --- 篮球
    - music
  animal: [奔驰,宝马,奥迪]
#  score:
#    english: 80
#    math: 90
  #下面是json的表达方式,可以不k: v 直接k:v
  score: {english: 80,math: 90}
  salaries:
    - 6000.22
    - 9999.99
  pet:
    name: 奔驰
    weight: 15000.00
  allPets:
    sick:
      - {name: 宝马,weight: 12000.00}
      - name: 奥迪
        weight: 10000.00
      - name: 凯迪拉克
        weight: 8000.00
    health:
      - {name: 雪铁龙,weight: 100.00}
      - {name: C6,weight: 120000.00}

运行结果↓
在这里插入图片描述

控制器的代码↓

@RestController
public class HelloController {
    @Autowired//自动注入
    Person person;
    @RequestMapping("/person")
    public Person person(){
        return this.person;
    }
}

我们的POJO类用到了Lombok插件,该插件就是自动写set、get、toString等方法,构造器需要自己手动写注解才有,在IDEA中可以点击文件结构来查看Lombok编译时产生的这些自动方法的实体↓
记得给POJO类加上配置属性,前缀:person

Person类也都用,就是有点长,此处不截图了。
在这里插入图片描述

POJO类:Person代码↓

//有人说 @Data注解包含了@ToString
//@ToString
@ConfigurationProperties(prefix = "person")//和配置文件中前缀为person的属性绑定值
//注册为容器中的组件
@Component
//lombok标记(get+set+hashCode+toString+equals...)
@Data
public class Person {
    private String userName;
    private Boolean boss;
    private Date birth;
    private Integer age;
    private Pet pet;
    private String[] interests;
    private List<String> animal;
    private Map<String,Object>score;
    private Set<Double>salaries;//哼哼 salary 复数 -> 先把y变i 然后加es
    private Map<String,List<Pet>>allPets;

}

POJO类:Pet类代码↓

@Data
public class Pet {
    private String name;
    private Double weight;
}

IDEA确实帮助我们自动空格了,注意 k: v,这里的v和冒号是有一个空格的,在Yaml语法中不能使用Tab缩进,所以在其他编辑软件中要小心点,IDEA真的我哭死。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意上面的红字是错误的,必须k: v有空格!
在这里插入图片描述
map没有加空格的错误形式!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意空格产生的层级关系!
配置优先级
在这里插入图片描述
字符串的语法
不管是直接 张三;还是’张三’;还是"张三"。
它们表示的都是字符串,效果一致。
而带引号的意义是,它是否要转义特殊字符
比如:

userName: zhangsan \n 李四

双引号效果:
在这里插入图片描述
单引号效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
双引号在控制台中是转义,在网页上是不转义的
单引号在控制台中不转义,在网页上是专一的
只是展示效果而已。
在这里插入图片描述

自定义类绑定的配置提示

我们发现,在Yaml文件的编写中,自己定义的内容没有提示,而SpringBoot的内容就有提示,我们要怎么做才能让自定义的类绑定的配置也有提示呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
导入依赖

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

刷新POM文件后,重启一下项目,然后下次书写自定义Yaml文件时,就有提示信息了。
如果重启项目仍然没有提示,那么就去clean一下Maven,然后重启项目,然后再尝试,应该就可以了(本人就是这么解决的)
在这里插入图片描述
在这里插入图片描述
我们可以看到,提示的不是userName,而是user-name,为什么不是驼峰了?
其实这里的-就代表是驼峰,相当于 -name 等于 Name

开发小提示\技巧
在这里插入图片描述

<configuration>
    <excludes>
            <exclude>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-configuration-processor</artifactId>
            </exclude>
    </excludes>
</configuration>

Web开发

Web开发的技术导图

在这里插入图片描述

新建SpringBoot项目

我们使用Spring Initializr来快速创建SpringBoot应用
在这里插入图片描述
①项目信息配置
在这里插入图片描述
②依睐框选
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
③项目配置修改

<version>2.3.4.RELEASE</version>

在这里插入图片描述

在这里插入图片描述
缺少src/main/java|resources目录
缺少主程序类

com.atugiu.boot.Boot05Web01Application
@SpringBootApplication
public class Boot05Web01Application {
    public static void main(String[] args) {
        SpringApplication.run(Boot05Web01Application.class,args);
    }
}

resources里缺少核心配置文件properteis

application.properties

缺少src/main/test/java目录

网页根目录:

http://localhost:8080/

静态资源规则与定制化

2、简单功能分析

2.1、静态资源访问

1、静态资源目录

类路径下:called/static or /public or /resources or /META-INF/resources

访问:当前项目根路径/ + 静态资源名
在这里插入图片描述

我们可以随意静态资源放入到这几个文件夹里,下面是演示↓
在这里插入图片描述

在这里插入图片描述
设问:如果我们的控制器处理的请求和静态资源的名称一样,那应该怎么响应处理呢?
在这里插入图片描述
在这里插入图片描述
原理是:静态映射 /** 。
请求先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源去在这里插入图片描述
目录,按照名字取找。如果静态资源没找到,则会是404↓
在这里插入图片描述

2、静态资源访问前缀

默认无前缀。
通过yaml配置文件增加前缀↓
在这里插入图片描述设置静态资源的访问前缀

spring:
  mvc:
    static-path-pattern: /res/**

在这里插入图片描述
测试增加前缀后的静态资源访问↓
原来的路径访问情况:
在这里插入图片描述
增加前缀访问的情况:
在这里插入图片描述
通过配置修该静态资源默认的访问位置↓

spring:
  mvc:
    static-path-pattern: /res/**
  resources:
    static-locations: [classpath:/haha/]

在这里插入图片描述

3、webjar(了解)

在这里插入图片描述

welcome与favicon功能

2.2、欢迎页支持

  • 静态资源路径下 index.html

    • 可以配置静态资源路径
    • 但是不可以配置静态资源的访问前缀。否则导致index.html不能被默认访问
  • controller能处理/index

在默认的情况下,访问根目录会取访问静态目录下的index.html欢迎页↓
注意这里吧先前设置的静态路径和前缀都注释掉了
在这里插入图片描述

在这里插入图片描述
配置默认静态资源目录的路径
在这里插入图片描述

2.3、自定义Favicon

设置网站图标
在这里插入图片描述
注销掉先前的配置,并且在浏览器中清理浏览器的缓存。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Web开发场景-源码分析

静态资源原理

  • SpringBoot启动默认加载xxxAutoConfiguration类(自动配置类)
  • SpringMVC功能的自动配置类 WebMvcAutoConfiguration,生效

在这里插入图片描述

  • 给容器中配了什么。

在这里插入图片描述

  • 配置文件的相关属性和xxx进行了绑定。 WebMvcProperties==spring.mvc、ResourceProperties==spring.resources

配置类只有一个有参构造器
有参构造器所有参数的值都会从容器中确定

//ResourceProperties resourceProperties:获取和spring.resources绑定的所有的值的对象
//WebMvcProperties spring.mvc获取和spring.resource绑定的所有的值的对象
//ListableBeanFactory beanFactory Spring的beanFactory
//HttpMessageConverters:找到所有的HttpMessageConverters
//ResourceHandLerRegistrationCustomizer 找到资源处理器的自定义器
//DispatcherServletPath
//ServletRegistrationBean 给应用注册Servlet、Filter...

在这里插入图片描述
资源处理的默认规则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
webjars的规则
在这里插入图片描述
静态资源路径的默认值
在这里插入图片描述
欢迎页的处理规则

HandlerMapping:处理器映射。保存了每一个Handler能处理哪些请求。

在这里插入图片描述
在这里插入图片描述

Rest映射及源码分析

3、请求参数处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Rest原理(表单提交要使用REST的时候)

  • 表单提交会带上_method=PUT

  • 请求过来会被HiddenHttpMethodFilter拦截
    在这里插入图片描述
    在这里插入图片描述
    该方法是获得请求参数,此处获取在这里插入图片描述
    _method请求参数

  • 判断请求是否正常,并且是POST方式

    • 获取_method参数的值
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      下面是允许的请求名称的集合↓如果里面包含就去重新包装一个request请求对象。
      在这里插入图片描述
      在这里插入图片描述
      上面可以看到,只有POST方法才会去判断是否是PUT或DELETE请求,否则就是GET,这也是为什么直接写PUT或DELETE请求类型,但是结果却是GET类型的原因。
      控制层的注解
      在这里插入图片描述
      派生注解
      在这里插入图片描述
      在这里插入图片描述

P27

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

76.qt qml-QianWindow开源炫酷界面框架(支持白色暗黑渐变自定义控件均以适配)

界面介绍界面支持: 透明 白色 黑色 渐变 单色 静态图 动态图侧边栏支持:抽屉、带折叠、多模式场景控件已集成: 暗黑风格 高亮风格、并附带个人自定义控件及开源demo白色场景如下所示:单色暗黑风格如下所示:用户自定义皮肤如下所示:皮肤预览如下所示:b站入口:https://www.bilibi…

2023年跨境电商行业研究报告

第一章 行业发展 1.1 概况 跨境电商&#xff08;Cross-border e-commerce&#xff09;是指通过互联网销售商品或服务&#xff0c;跨越国家或地区边界&#xff0c;实现国际贸易的一种商业模式。跨境电商的兴起得益于全球化和数字化的趋势&#xff0c;以及互联网的普及和支付、…

Linux常用命令——基于Ubuntu22.04

本文介绍了一些Linux的常用命令。为了便于快速检索命令位置&#xff0c;文章二级标题都以“命令&#xff1a;命令的作用”展示&#xff0c;有些命令会先介绍命令的几个常用参数&#xff0c;然后结合具体的操作展示命令的使用。为了便于记忆&#xff0c;也会提到命令是由哪些短语…

【链表OJ题(五)】合并两个有序链表

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录链表OJ题(五)1. 合并…

elasticsearch全解 (待续)

目录elasticsearchELK技术栈Lucene与Elasticsearch关系为什么不是其他搜索技术&#xff1f;Elasticsearch核心概念Cluster&#xff1a;集群Node&#xff1a;节点Shard&#xff1a;分片Replia&#xff1a;副本全文检索倒排索引正向和倒排es的一些概念文档和字段索引和映射mysql与…

原来CSS 也可以节流啊

Ⅰ、前言 「节流」 是为了减少请求的触发频率&#xff0c;不让用户点的太快&#xff0c;达到节省资源的目的 &#xff1b;通常 我们采用 JS 的 定时器 setTimeout &#xff0c;来控制点击多少秒才能在触发&#xff1b;其实 通过 CSS 也能达到 「节流」 的目的&#xff0c;下面…

面试官:MQ的好处到底有哪些?

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…

大数据核心技术是什么

大数据的核心层&#xff1a;数据采集层、数据存储与分析层、数据共享层、数据应用层&#xff0c;可能叫法有所不同本质上的角色都大同小异。 大数据的核心技术都包括什么&#xff1f; 1、数据采集 数据采集的任务就是把数据从各种数据源中采集和存储到数据存储上&#xff0c…

如何用python代码,更改照片尺寸,以及更换照片底色

前言 python浅浅替代ps&#xff1f;如何用代码来p证件照并且更换底色&#xff1f; 唉&#xff0c;有个小姐姐给我扔了张照片&#xff0c;叫我帮忙给她搞成证件照的尺寸还得换底色&#xff0c;她说自己忙的很 可惜电脑上没有ps只有pycharm&#xff0c;没得办法只能来试试看代…

Printk打印内核日志

一、背景 Linux 内核中提供了内核日志打印的工具printk。它的使用方式C语言中的printf是类似的。接下来我们介绍一下printk的使用方式。本文以打印Binder中的日志为例&#xff0c;进行演示。 printk的方法声明和日志级别binder驱动中增加 打印代码android系统中查看日志信息 …

第四季新星计划即将开启,博客之星取消拉票你怎么看?

catalogue&#x1f31f; 写在前面&#x1f31f; 线下创机遇&#x1f31f; 新星计划&#x1f31f; 做导师可以得到什么&#x1f31f; 新星计划跟原力计划有何不同&#xff1f;&#x1f31f; 博客之星新玩法你怎么看&#xff1f;&#x1f31f; 写在前面 哈喽&#xff0c;大家好&…

为什么程序员喜欢这些键盘?

文章目录程序员的爱介绍个人体验程序员的爱 程序员是长时间使用计算机的群体&#xff0c;他们需要一款高品质的键盘来保证舒适的打字体验和提高工作效率。在键盘市场上&#xff0c;有很多不同类型的键盘&#xff0c;但是对于程序员来说&#xff0c;机械键盘是他们最钟爱的选择…

新型 PCIe 数字化仪结合了超快的速度、高分辨率和市场领先的流媒体

Spectrum Instrumentation 新增的两款 PCIe 数字化仪卡扩展了该公司的旗舰 M5i 系列&#xff0c;以提供最佳的 GHz 信号采集和分析功能。单通道和双通道卡提供超快的 10 GS/s 采样速度、12 位垂直分辨率和市场领先的 12.8 GB/s 数据流&#xff08;通过 PCIe 总线&#xff09;的…

思科模拟器 | 交换机与路由器的配置汇总【收藏备用】

文章目录一、vlan配置【实现同一vlan的主机通信】1、基本配置和接线2、vlan配置与端口连接3、测试连接二、truck配置【实现连接在不同交换机上的同一vlan的主机通信】1、基本配置和接线2、vlan配置与端口连接3、打truck做连接3、测试连接三、静态路由配置1、自定义IP地址2、基本…

断崖式难度的春招,可以get这些点

前言 大家好&#xff0c;我是bigsai&#xff0c;好久不见&#xff0c;甚是想念。 开学就等评审结果&#xff0c;还好擦边过了&#xff0c;上周答辩完整理材料&#xff0c;还好都过了(终于可以顺利毕业了)&#xff0c;然后后面就是一直安享学生时代的晚年。 最近金三银四黄金…

【Java】期末复习知识点总结(4)

适合Java期末的复习~ &#xff08;Java期末复习知识点总结分为4篇&#xff0c;这里是最后一篇啦&#xff09;第一篇~https://blog.csdn.net/qq_53869058/article/details/129417537?spm1001.2014.3001.5501第二篇~https://blog.csdn.net/qq_53869058/article/details/1294751…

数据分析自学路线

数据分析作为近几年火起来的IT技术岗位&#xff0c;在大数据时代的浪潮下迅速发酵膨胀&#xff0c;席卷了众多互联网企业&#xff0c;漫延到了金融、教育、医疗、消费等传统行业&#xff0c;在新经济领域也有重要作用&#xff0c;比如人工智能、新能源、电子芯片、企业数字化服…

力扣-排名靠前的旅行者

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1407. 排名靠前的旅行者二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其…

20年程序员生涯,读了200多本技术书,挑了几本精华好书分享给大家

不知不觉已经又走过了20个年头了&#xff0c;今年已经44了&#xff0c;虽然我已经退休在家&#xff0c;但一直都保持着读书的习惯&#xff0c;我每年平均要读10本技术书籍&#xff0c;保持不让自己的技术落伍。 这些年读的技术书不下200本&#xff0c;很多好书我都会保存在家&a…

【蓝桥杯-筑基篇】排序算法

&#x1f353;系列专栏:蓝桥杯 &#x1f349;个人主页:个人主页 目录 前言&#xff1a; 一、冒泡排序 二、选择排序 三、插入排序 四、图书推荐 前言&#xff1a; 算法工具推荐&#xff1a; 还在为数据结构发愁吗&#xff1f;这款可视化工具&#xff0c;帮助你更好的了解…