SpringBoot-核心技术篇

2年前未命名158
SpringBoot-核心技术篇 忆忆_application 已于2023-03-16 18:52:54修改 997 收藏 16 分类专栏: 私人 文章标签: spring boot java spring 后端 开发语言 于2023-03-15 23:13:37首次发布 私人 专栏收录该内容 2 篇文章 0 订阅 订阅专栏 技术掌握导图

六个大标题↓ 配置文件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
标签: [db:标签TAG]

相关文章

一文吃透 Spring 中的 AOP 编程

一文吃透 Spring 中的 AOP 编程...

学习C++这几个网站足矣

学习C++这几个网站足矣...

刚来的00后太卷了,上班还没2年,跳到我们公司起薪25k....

刚来的00后太卷了,上班还没2年,跳到我们公司起薪25k.......

蓝桥杯第十四届校内赛(第三期) C/C++ B组

蓝桥杯第十四届校内赛(第三期) C/C++ B组...

2022个人年度总结:拒绝无效努力,实现破圈成长。

2022个人年度总结:拒绝无效努力,实现破圈成长。...

学习 Python 之 Pygame 开发魂斗罗(十二)

学习 Python 之 Pygame 开发魂斗罗(十二)...