0


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

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

控制器的代码↓

@RestControllerpublicclassHelloController{@Autowired//自动注入Person person;@RequestMapping("/person")publicPersonperson(){returnthis.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...)@DatapublicclassPerson{privateString userName;privateBoolean boss;privateDate birth;privateInteger age;privatePet pet;privateString[] interests;privateList<String> animal;privateMap<String,Object>score;privateSet<Double>salaries;//哼哼 salary 复数 -> 先把y变i 然后加esprivateMap<String,List<Pet>>allPets;}

POJO类:Pet类代码↓

@DatapublicclassPet{privateString name;privateDouble 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
@SpringBootApplicationpublicclassBoot05Web01Application{publicstaticvoidmain(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类型的原因。控制层的注解在这里插入图片描述派生注解在这里插入图片描述在这里插入图片描述

请求处理-怎么改变默认的_method

在这里插入图片描述

没什么用。

@Configuration(proxyBeanMethods =false)publicclassWebConfig{@BeanpublicHiddenHttpMethodFilterhiddenHttpMethodFilter(){HiddenHttpMethodFilter methodFilter =newHiddenHttpMethodFilter();
        methodFilter.setMethodParam("_m");return methodFilter;}}

在这里插入图片描述

请求映射原理

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

视图解析与模板引擎

视图解析:SpringBoot默认不支持JSP,需要引入第三方模板引擎技术实现页面渲染。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

Thmeleaf的使用

1、引入Starter

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

2、自动配置好了thymeleaf
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用Thmeleaf
新建一个HTML文件,在html文件里写上Thmeleaf的名称空间。

<htmllang="en"xmlns:th="http://www.thymeleaf.org">

在这里插入图片描述
网页代码

在这里插入图片描述
控制器代码

在这里插入图片描述
下面这行代码不能跳转 @{}的形式会认为括号里面的值就是URL地址值。
在这里插入图片描述

标签: spring boot java spring

本文转载自: https://blog.csdn.net/qq_55868059/article/details/129569489
版权归原作者 忆忆_application 所有, 如有侵权,请联系我们删除。

“SpringBoot-核心技术篇”的评论:

还没有评论