目录
前言
本文介绍了我学习Spring Boot的全过程和总结的笔记,绝无私藏,希望可以帮到大家。
提示:以下是本篇文章正文内容,下面案例可供参考
第一章 Spring Boot
1、Spring Boot
-
开源框架
-
作用
-
用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
-
配置
-
properties
-
yaml
-
-
-
特性
-
自动配置(零配置) : 使用Spring Boot项目,告别xml文件,提供大量的自动化配置
-
自动化测试(junit测试工具)
-
内嵌tomcat服务器
-
项目健康情况的检测
-
2、Mybatis开发流程
-
引入jar包
-
全局配置(mybatis-config.xml)
-
mapper接口
-
注解或者xml文件
-
注册mapper
-
测试(4行代码)
3、Spring
-
简化mybatis的开发
-
mapper对象 : Spring配置文件将对象以及对象相关联bean对象封装(SqlSessionFactory、SqlSession)
-
加入大量的bean(service、mapper、sqlSession、sqlSessionFactory)
-
IOC和DI可以让项目当中bean对象产生关联
-
Spring特别适合管理项目核心对象(mybatis、redis、mongodb、spring cloud)
-
每一个框架都有自己核心bean对象,我们都需要将这样的对象xml、注解、配置类
第二章 maven
1、maven简介
-
maven是一个项目构建工具,java编写出来的一个软件。
-
idea构建一个普通的java项目,为什么还要使用maven?
2、maven作用
-
打包
-
测试
-
安装(仓库)
-
clean
-
管理jar包
-
第三方框架的一些类和接口,打成jar包
-
我们项目需要一些jar包,叫做当前项目的依赖
-
dependency在我们已学知识点当中
-
DI : 类当中包含了另外一个类对象
-
项目当中需要的第三方jar包,我们就叫做当前项目的依赖
-
-
3、maven的安装
-
安装jdk
-
配置JAVA环境变量
-
此电脑(单击鼠标右键选择属性)
-
属性窗口 ---> 高级系统设置
-
系统变量: 查找是否存在一个JAVA_HOME的环境变量,如果有,这一步自动跳过
-
如果没有 : 点击新建 --> 环境变量名(JAVA_HOME) --> 环境变量值(自己jdk安装的目录)--> 确定
-
找到path环境变量,打开之后,右侧新建: %JAVA_HOME%\bin
-
-
安装maven
-
安装完毕的文件夹发给大家
-
-
配置maven的环境变量
-
此电脑(单击鼠标右键选择属性)
-
属性窗口 ---> 高级系统设置
-
系统变量: 查找是否存在一个MAVEN_HOME的环境变量,如果有,这一步自动跳过
-
如果没有 : 点击新建 --> 环境变量名(MAVEN_HOME) --> 环境变量值(自己maven安装的目录)--> 确定
-
找到path环境变量,打开之后,右侧新建: %MAVEN_HOME%\bin
-
-
idea集成maven
-
idea本身自带maven(不建议大家使用idea自带maven)
-
打开欢迎界面
-
2020版本 : 打开欢迎界面 选择界面下方configure ---> settings
-
2021版本 : 打开欢迎界面 选择左侧的customize --> 下方all settings
-
-
三项maven的配置
-
Maven home directory : 填写的是你maven安装的目录
-
User settings file : 填写是你maven的配置文件(maven安装目录内部conf\settings.xml)
-
Local repository : 本地仓库
-
4、本地仓库和中央仓库
-
中央仓库(center repository) : 有很多的开源框架本身就是基于maven,maven打包成jar包,jar包都放到美国的一台计算机当中。 com文件夹group31文件夹abc
-
框架(abc)
-
groupId: com.group31
-
artifactId : abc
-
version : 1.0.0
-
-
本地仓库(local repository) : 下载的jar所存放本地路径,gav
-
阿里巴巴 : 做了中央仓库的镜像
-
settings.xml文件当中需要的配置
-
下载jar所对应的资源地址 : 阿里云的中央库
-
本地仓库
-
5、如何测试maven安装成功
打开命令行窗口
-
mvn -v
6、Spring Boot
Spring Boot通过maven构建出来
7、坐标
-
maven将一个项目当做一个对象
-
信息
-
group-id : 项目组名称(项目上线之后的域名倒写的方式 : www.alibaba.pay.com) com.pay.alibaba
-
artifact-id : 项目名称(模块名称)
-
version : 版本
-
-
gav : 可以到中央仓库当去下载当前gav对应的项目的jar包
-
依赖的信息 : (jar包的信息)
-
maven信息 : pom.xml文件 project object model
-
模型 : 信息 -> 建立一个模型
第三章 Spring Boot工程的搭建
1、搭建工程
-
Spring | Home官方文档当中下载对应的项目,通过idea打开即可
-
idea给我们提供了一个创建spring boot工程的一个插件(工具)
2、Spring Boot工程目录结构
-
maven目录结构一致
-
目录结构如下
-
src : 项目当中所有源代码
-
main : 项目当中主要的文件
-
java : java源代码(类、接口)
-
基础包(构建项目指定package)
-
项目名Application类 : 启动类,启动服务器
-
-
-
resources : 非java代码(xml、html、图片、音频、视频)
-
application.properties : spring boot工程给我们提供的配置文件(yaml文件)
-
-
-
test :项目当中测试的文件
-
java : java测试源代码
-
基础包
-
项目名Test类: 测试
-
-
-
-
-
pom.xml : 标记来描述项目的一些信息(gav坐标、依赖)
-
3、SpringBoot测试类
-
@SpringBootTest :
-
SpringBoot这是一个测试类,进行测试内嵌一个容器对象(已经创建完毕)
-
类对象交给容器来管理
-
-
@Test : Junit测试框架提供一个
4、自动化配置(零配置)
-
Spring Boot使用第三框架,大部分的配置Spring Boot配置完毕
-
如果我们需要加入配置 application.properties或者application.yaml文件
-
application.properties
-
配置名=值
-
-
application.yaml
-
单独去将
-
-
-
约定大于配置 : 有一些信息我们是通过配置文件形式描述(xml),Spring Boot约定
第四章 lombok
1、lombok简介
-
简化一个简单java类型当中的一些通用代码
-
set和get方法、toString、equals、hashcode
2、使用流程
-
导入依赖
-
初始化项目(dependencies),对当前项目需要的框架通过勾选选中的方式来完成导入依赖
-
pom.xml文件,dependency标记,配合gav坐标
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
-
-
配置 : application.properties或者application.yaml文件当中进行配置
-
使用
3、lombok常用的注解
-
@Setter : 修饰类
-
@Getter : 修饰类
-
@ToString : 修饰类
-
@Data : 复合注解(@Setter、@Getter、@ToString、@EualsAndHashcode) : 记住
-
@NoArgsConstructor : 添加无参构造器
-
@AllArgsConstructor :添加所有成员变量对应的构造器
-
@EqualsAndHashcode
4、idea不兼容lombok
-
idea的开发工具当中安装lombok插件
-
file ->settings -> plugins -> market place --> lombok 红色辣椒logo 点击安装 重启idea
第五章 SpringBoot集成mybatis
1、mybatis传统开发流程
-
导入jar包(复制mybatis、mysql的jar包放置项目lib)
-
mybatis的全局配置文件(数据源配置、mapper注册、运行时配置)
-
mapper接口
-
mapper的sql映射文件(xml)
-
注册mapper
-
测试
2、SpringBoot集成mybatis
-
导入依赖(maven进行简化,在pom.xml文件中导入dependency)
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency>
-
application.properties文件中进行配置
spring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql://localhost:3306/book_31?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl mybatis.configuration.map-underscore-to-camel-case=true mybatis.mapper-locations=classpath:mapper/*.xml
-
mapper接口
@Repository @Mapper public interface Mapper接口 { @Select("SQL语句") 方法声明; }
-
mapper的sql映射文件(不能简化、注解)
-
注册mapper配置文件进行简化
-
测试: Spring Boot自动化测试
第六章 Spring boot事务
1、事务(Transactional)
-
业务方法对于数据库一系列操作,事务。
-
事务特性(ACID)
-
原子性 : 不可拆分性,一个业务方法(整体性)
-
一致性 : 事务提交前后,数据前后要一致。
-
隔离性 : 事务方法执行的过程的过程,不允许调用者在去调用事务(并发)
-
持久性 : 事务提交生效之后,数据库永久发生变化,不能通过回滚操作将数据还原
-
2、事务处理
-
jdbc : 事务处理,默认提交,connection.setAutoCommit(false)。如果声明一个事务,connection.commit()、connection.rollback()\
-
mybatis : 事务处理,默认不提交
-
springboot : 事务处理,默认对于数据库的独立操作提交,自定义业务方法具备事务的特性
3、Spring boot事务处理
-
@Transactional注解修饰一个业务方法
-
spring使用方式
-
需要在容器当中加入一个bean: 事务管理器
-
-
spring boot使用方式 : 开箱即用
-
事务处理流程 :
-
提交 :业务方法上面@Transactional,所有默认事务取消 ,执行代码,检测是否发现了运行时异常,没有出现任何运行时异常,认为业务方法没有任何问题。
-
回滚 : 发现业务方法内部出现了运行时异常,回滚
-
4、运行时异常
-
Throwable是所有异常类的根类,描述了异常具备共通的内容(消息)
-
Error、Exception
-
Error类 :系统问题出现错误。程序员无法精确干越
-
Exception : 业务异常
-
RuntimeException : 运行时异常,只有程序运行起来的时候,才知道是否会出现这个异常。
-
NullPointerException
-
ArrayIndexOutOfBoundsException
-
ClassCastException
-
mybatis : BindingException
-
spring
-
-
编译时异常(检查时异常) : 编写代码,java编译器自动检测,提示,try,catch,throws向上抛
-
-
Throwable : message : String
public class Throwable{
private String message;
public Throwable(String message){
this.message = message;
}
set和get方法
方法 : 查看异常
}
5、事务的配置
-
@Transactional :注解是用来修饰业务方法,方法具备原子性。一旦方法出现运行时异常,整个方法对于数据库的操作全部都会回滚;没有出现运行时异常,提交。
-
@Transactional(属性=值,属性=值)
-
超时属性 : timeout : int
-
当客户端使用事务方法,如果本次方法的调用超过了指定的时长,会产生一个事务超时异常。
-
-
事务回滚属性 :
-
rollbackFor={异常类型.class,异常类型.class} : 回滚操作
-
没有加入此属性,默认所有的运行时异常都会回滚
-
-
rollbackForClassName={“异常的全类名”}
-
noRollbackFor={异常类型.class,异常类型.class} :针对什么异常不会滚
-
noRollbackForClassName={"异常的全类名"}
-
-
事务传播行为
-
事务的隔离级别(伏笔)
-
Spring Boot事务处理的注意事项
-
事务方法必须是公有
-
方法不能定义为final
-
事务方法,不允许被本对象当中的其他方法内部调用,否则事务失效
-
当前事务方法所属的类型必须由Spring 管理
-
数据库必须支持事务
-
事务的传播行为特性(伏笔)
-
运行时异常才会导致事务的回滚(运行时异常,不要自己处理)
-
抛出的异常必须是运行时异常
-
6、事务的传播行为
-
概念
-
当一个事务方法被另外一个事务方法调用的时候,启动一个事务包含两套业务还是启动两个事务
-
-
前提
-
必须一个事务方法调用另外一个事务方法
-
写一个全新的业务,交易
-
-
默认情况下,当一个事务方法调用另外一个事务方法时候,事务方法会将本身自己事务传递给目标事务方式。
-
事务的传播行为 :
-
REQUIRED : 默认的传播行为,在同一个事务当中
-
REQUIRED_NEW : 事务被其他事务调用,需要一个新的事务
-
-
被调用的事务方法上面加入@Transactional(propagation=Propagation.事务传播)
第七章 读取自定义配置
1、配置(Configuration)
-
xml文件 : 按照指定格式配置的数据信息,肯定是框架底层按照格式读取。
-
配置文件的信息全部都是用来被需要的框架来读取
-
spring boot发现xml文件的约定非常的复杂,简化开发,提供了一个全新的配置文件的格式
-
properties
-
yaml
-
2、问题
-
项目当中有一些数据,是属于全局性数据,存储起来,存储我的配置文件的当中
3、读取自定义配置
-
依赖注入的形式来进行读取
@Component 类{ @Value("${加入配置名称}") private 数据类型 变量; }
-
类加载自定义配置
@Component // 读取properties文件中指定前缀对应的配置信息,prefix指定前缀 @ConfigurationProperties(prefix = "group") @Data public class GroupConfig { private String address; private String name; }
第八章 配置文件
1、properties文件
-
指定的数据格式
-
配置名=配置值
-
java当中有一个集合类型,Properties
2、yaml文件
-
YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。
-
xml文件 :是一种标记语言
-
-
在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)
-
yaml不是一种标记语言,但是他具备标记语言的特征可以存储配置。
3、yaml格式
-
properties文件: key=value
张三.老婆.闺蜜=章子怡
张三.老婆.车=宝马3系
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/book_31
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
-
yaml文件 : 缩进式(tab)的配置
张三: 老婆: 闺蜜: 章子怡 车: 宝马3系
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost
driver-class-name:
4、总结
-
application.yaml和application.properties如果同时存在,以application.properties
-
文件的扩展名代表文件的类型,文件的类型扩展名都是3个字符,yaml可以省略为yml
-
缩进来描述递进关系
第九章 多环境选择
1、多环境
-
软件开发周期当中 :计算机的环境问题
-
环境
-
开发环境 (develop)
-
测试环境 (test)
-
生产环境 (production)
-
2、多环境配置
-
多环境多配置文件
-
多个环境,配置多少个配置文件即可
-
application-环境名称.yml
-
application-pro.yml
-
application-dev.yml
-
-
多环境选择
-
application.yml文件
spring: profiles: active: pro
-
-
-
多环境单配置文件 (鸡肋)
-
多个环境,你还是只有一个配置文件
-
spring:
profiles:
active: dev
---
spring:
datasource:
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/book_31
type: com.alibaba.druid.pool.DruidDataSource
profiles: dev
mybatis:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/*.xml
---
spring:
datasource:
username: root
password: 78765421134adsad
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.113:3306/book_31
type: com.alibaba.druid.pool.DruidDataSource
profiles: pro
mybatis:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/*.xml
3、多环境选择应用场景
-
项目当中配置文件有多个情况
-
业务实现上如果在不同环境当中也是不同,也可以使用多环境选择
-
一个业务接口对应的多个实现类上面加入@Profile("环境名称")
-
实现类的对象就会根据主配置文件当中的环境名称,来讲环境对应的实现类对象放置Spring的容器当中
-
第十章 Maven功能
1、依赖管理
-
依赖(dependency) : 项目依赖另外一个项目(mybatis)
-
使用流程
-
中央仓库 : 计算机存储所有开源的项目jar包、maven
-
本地仓库 : 安装maven(conf/settings.xml) ,本地仓库的配置
-
maven工程: pom.xml文件
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency>
-
-
将gav按照顺序形成本地仓库对应文件夹目录
2、maven工具
-
compile 编译 :
-
存储当前项目内部 : target文件夹
-
-
clean 清空 :
-
将maven生成字节码文件进行清空
-
-
test 测试
-
可以将Spring Boot的所有测试全部执行一次,形成测试报告
-
-
package 打包
-
将我们的项目达成jar(war) zip、rar
-
-
install 安装
-
将我们的项目打包,安装到本地仓库当中
-
第十一章 pom文件解析
1、父工程
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
-
自定义Spring Boot工程有一个父工程 : spring-boot-starter-parent
-
描述SpringBoot的常规配置约定
-
-
spring-boot-starter-parent也有一个父工程spring-boot-dependencies
-
依赖版本管理
-
2、项目信息
<groupId>com.group</groupId>
<artifactId>springboot_31</artifactId>
<version>0.0.1</version>
<name>springboot_31</name>
<description>这是一个spring boot工程的第一个案例</description>
3、版本信息
<properties>
<java.version>1.8</java.version>
</properties>
第十二章 Spring Web
1、专业术语
-
web : 互联网相关的技术
-
服务器(server) : 如果一台计算机安装了可以被其他计算机访问的软件,计算机叫做服务器。
-
可以被其他计算机访问的电脑
-
mysql
-
自己创建Spring Boot工程肯定是需要客户来访问,放置到一台服务器当中,Spring Boot内嵌了一台tomcat服务器,就是任意的Spring Boot都允许客户端访问
-
导入一个依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
-
-
浏览器端(browser) : 当客户使用浏览器访问我们的项目。 BS架构
-
网页游戏
-
网页访问系统
-
-
客户端(client) : 客户的计算机当中安装了一个软件,用户软件来访问服务器。 CS架构
-
QQ
-
英雄联盟
-
-
服务器软件:FTP(文件服务器)、JBoss、Tomcat(tom猫),Spring Boot内嵌了一个tomcat服务器,客户端可以通过浏览器来访问
-
端口(port)
-
计算机当中安装了mysql、tomcat(8080)、jboss、ftp
-
计算机比喻成一个大房子,里面服务器比喻房间,端口进入房间的门牌号
-
赛伯乐大厦 :黄浦路112号,不能精确定位到某一个服务
-
八戒财税 : 黄浦路112号2002房间
-
localhost:3306
-
-
开启Spring Boot的服务器
-
启动类
-
浏览器访问地址
-
http://ip地址:端口号 static
-
-
web应用程序的部署方案
-
计算机当中创建Spring Boot引入web依赖,通过启动类项目启动,resources/static/login.html
-
中国网络高墙,独立搭建服务器(视频、图片、网页),不允许其他客户端访问
-
必须通过公安局(网络侦查大队)备案,审核你项目是否违规
-
租赁计算机作为我们服务器(阿里云)
-
申请域名 : 当前项目一种简写方式 www.sd.com/login.html ----> http://192.168.0.100:8080/login.html
-
网络资源 : 允许客户端或者浏览器端访问到服务器的内容
-
html
-
图片
-
txt
-
超文本都可以被用户访问 : http://网址 超文本传输协议 ftp://网址 电驴 快播 迅雷
-
java当中方法也可以做为网络资源,让用户访问!超级重要
public class Person{ // 定义一个网址 /sum public int sum(int i,int j){ return i + j; } } http://localhost:8080/sum
-
url : 统一资源定位符,访问服务器端某个资源,网址
2、请求和响应模式
-
请求 (request): 当客户访问服务器的某个资源,这个过程叫做请求
-
响应(response) : 当服务器发现用户请求的资源存在的时候,将资源反馈给我们的客户,这个过程叫做响应
-
特征 :
-
http无状态性 : 当客户端发送器请求给服务器,服务器接受到请求之后,将结果响应给客户端。本次请求响应就结束了。请求响应结束之后,客户端就就会断开与服务器的连接。
-
当客户端发送请求给服务器的时候,服务器会创建两个对象
-
HttpServletRequest 类: 对象当中包含所有客户端的信息(登录账号、密码、浏览器、操作系统)
-
HttpServletResponse类 : 对象包含响应给客户端的所有信息
-
-
请求响应对象的用途
-
从请求当中获取数据,操作HttpServletRequest,提供各种get方法
-
从响应当中获取响应相关的数据,HttpServletResposne对象
-
-
如何获取(伏笔Spring MVC)
-
3、web开发模式
-
MVC
-
Model : 模型数据,通过控制器进入到某一个html页面当中,如果html需要用到动态数据
-
View : 视图(jsp、thymeleaf、FreeMarker),就是在html的基础上加入视图技术代码(负责将模型数据展现出来)
-
Controller : 控制器(处理器 Handler),可以接受客户端发送请求,控制器对象当中的方法可以设定url地址,被客户端访问
-
-
MVC结论:
-
服务器端有很多的资源,例如网页、图片、css、java当中方法(只有控制器当中的方法才允许客户端访问)
-
用户访问普通的html,让用户进行访问
-
用户访问的页面,需要动态数据,需要让用户先请求控制器,控制器将结果传递给页面,页面配合着视图技术将数据以一种特定的方式渲染出来
-
-
MVVM : 前后端分离 (axios、vue、vuex、10种框架左右)
4、控制器(controller)
-
控制器的概念
-
java当中方法也可以作为网络资源让客户端进行访问,方法必须放到控制器当中
-
控制器是接受请求,做出响应的java代码而已。
-
控制器是前端进入到后端一个桥梁
-
-
编写控制器
-
Spring的时候 : @Component、@Service、@Repository、@Controller
-
类:类的对象需要由Spring 的IOC容器接管即可。
-
-
@RequestMapping
-
类 : 类定义url地址
-
方法 : 可以给方法定义一个url地址
-
-
问题
-
为什么要让客户端通过url地址访问控制器方法呢?
-
-
总结
-
接受客户端发送过来请求,并且负责做出响应
-
5、控制器如何做出响应
-
MVC : 控制器只能返回String类型,String类型跳转的目标页面的名称
-
视图的跳转
application.yaml spring: mvc: view: prefix: / suffix: .html
-
-
MVVM : 控制器随意返回数据
-
控制器当中不要在参与任何页面的跳转,返回数据,方法获取首页数据
-
6、请求参数
-
前端发送给后端的数据就叫做请求参数
-
原生html当中
-
form表单 : 表单元素的name属性做请求参数名、value属性作为请求参数值,发送给form表单对应action资源
-
地址 : 访问目标资源的地址?请求参数名=请求参数值&请求参数名=请求参数值
-
-
javascript:
-
ajax发送请求方式
-
axios发送请求方式
-
7、前端发送请求参数的几种方式
-
form表单
-
用户输入项,值传递给目标控制器
-
-
url?请求参数名=值&请求参数=值
-
无需form表单 : 多数据 url传递就
-
-
占位符参数 :
-
无需form表单,当传递主键,强烈简易大家使用占位符参数
-
总结
url/值 @RequestMapping("/url/{名称}") 方法(@PathVariable(名称) 形参)
-
-
javascript : 各种传递数据方式(伏笔)
8、控制器如何接收请求参数
-
形参的形式来接受,前端传递多个请求数据,多个请求数据以形参的形式描述出
-
形参的名字和请求参数的名字必须一直
-
形参的名字和请求参数名不一致的话,相当于没有给形参传递数据,系统会给形参赋值为null
-
真实业务场景,如果真的请求参数名和形参就不一样
-
可以在控制器方法的形参的前面 @RequestParam(value="请求参数名") 请求参数和形参进行匹配
-
-
@RequestParam注解
-
value="请求参数名"
-
required=true或者false
-
默认是true,你必须给我传递,如果没有传递请求参数,默认传递null
-
false,可以不传递,defaultValue="默认值"
-
-
-
-
java对象来接受多个值
-
多个请求参数,Spring可以将多个请求参数封装成一个对象,要求对象的成员变量必须要和请求参数一直
-
9、请求转发和重定向
-
网络资源 :客户端可以访问服务器的内容(图片、html、css、txt、方法)
-
请求转发
-
当客户端发送请求给网络资源
-
资源接受客户端发送过来的请求(静态资源),直接将资源响应会客户端
-
资源接受客户端发送过来的请求(动态资源:thymeleaf、方法),配合方法做出响应
-
-
客户端发送请求给某一个资源,请求转发给了另外一个资源。另外的资源做出响应。
-
张三 ----> 李四 ---> 王五
-
-
-
重定向
-
客户端发送请求给某一个资源,资源无法解决,资源告诉请求,你再去找另外一个资源
-
-
请求转发和重定向
-
都是为了完成资源的跳转
-
-
控制器方法返回值的位置: 做资源的跳转
-
return "名字" : 请求转发
-
请求转发
return "forward:/资源"
-
重定向
return "redirect:/资源"
-
-
请求转发和重定向
请求转发 重定向 url地址是否发生变化 不变 发生变化 请求数量 一次请求 产生多个请求 -
应用场景
-
如果发生跳转的资源之间,需要共享数据,请求转发
-
仅仅是为了完成资源的跳转,用请求转发和重定向都ok
-
第十三章 模板引擎技术
1、模板引擎(template engine)
-
在html的基础上可以动态展示模型数据的技术
-
MVC当中View : 视图技术
-
分类
-
JSP
-
Thymeleaf
-
FreeMarker
-
2、Spring的模型数据处理
-
MVC当中Model,模型数据,所有控制器需要传递给目标页面的数据
-
模型数据处理:如何将数据传递给目标视图
-
控制器方法的形参位置 : Map<String,Object> map
-
模型数据当中设置数据 put方法
-
-
控制器方法的形参位置 : Model
-
addAttribute(String,Object)
-
-
控制器方法的形参位置 : ModelMap
-
addAttribute(String,Object)
-
-
控制器的方法返回值是一个ModelAndView
-
mvc模式当中,要求控制器返回值必须是String
-
ModelAndView : 模型数据和视图
-
setViewName(String) : 设置页面视图
-
addObject(String,Object)
-
-
-
-
区别:
-
普通java开发人员来说,Map集合,页面当中需要的数据扔到Map
-
熟练掌握mvc概念,Model
-
3、模板引擎实现(thymeleaf)
-
导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
-
配置
spring: mvc: view: prefix: / suffix: .html
-
使用
-
resources : 模板引擎的页面,templates是Spring Boot的约定,以后无论使用jsp、freemarker
-
所有templates当中html页面不是一个简单的静态网页,页面需要展示模型数据,页面是不允许直接访问,必须经由控制器才可以访问
-
static文件夹、templates文件(页面是静态页面放置static、页面是动态页面使用模板引擎技术html页面放置templates)
-
template engine
-
-
模板引擎页面
<html xmlns:th="http://www.thymeleaf.org"> </html>
-
通过thymeleaf提供的属性来渲染模型数据
-
th:text="${模型数据key}" : 将模型数据渲染到指定元素内部
<h4 th:text="${msg}"></h4>
-
第十四章 thymeleaf常用属性
1、th:text="${}"
-
将模型数据内容渲染到指定的标记内部
2、th:each="变量 : ${模型数据}"
-
对某个html元素加入th:each,可以对模型数据当中集合、数组类型进行循环,每次循环就会产生一个与之对应的html元素
-
th:each="变量 : ${表达式}"
-
th:each="变量,state : ${表达式}"
-
state是一个当前循环状态
-
index
-
count
-
-
3、th:src="${表达式}"
th:src="${表达式}"是在Thymeleaf模板引擎中使用的一个标识符,用于设置HTML元素的src属性。该表达式的作用是动态地引用指定的资源,这个资源的路径和名称由表达式指定。
在Thymeleaf模板引擎中,任何有效的SpringEL表达式都可以使用在th:src属性中。
例如,使用如下代码动态地引入图片资源: <img th:src="@{${product.imageUrl}}"/>
其中,${product.imageUrl}是代表产品图片的动态表达式,通过@{}语法包装起来以获得正确的相对路径。
4、任何的html属性如果需要模型数据,th:
-
th:style="${}"
-
th:href=""
5、th:if="${布尔表达式}"
-
决定一个标记元素是否存在
第十五章 拦截器和session
1、系统的分类
-
互联网项目 : 只要是可以访问到网络的客户端都可以进入
-
内部系统项目 : 需要用户必须登录之后才可以进行操作
2、Session
-
会话对象
-
当客户端发送请求给服务器,服务器会给客户端在服务器的内存当中分配一个临时数据存储空间,定义一个名字jSessionId,将session编号回传给客户端;下次用户如果一旦再次发送请求,客户端浏览器自动携带jSessionId的请求参数,找到之前分配的Session
-
结论
-
每一个客户端,服务器都会对于分配一个属于当前客户端的内存空间
-
3、Session实现的方式
-
硬编码
-
HttpSession类型
-
仅仅是在控制器的方法形参位置加入HttpSession类型形参,SpringMVC自动将session传递形参
-
-
注解
-
@SessionAttributes
-
修饰控制器类
-
将模型数据当中内容放置到session当中
-
4、拦截器
-
拦截器的接口 : HandlerInterceptor,提供三个方法
// 前置拦截方法
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
// 后置拦截方法
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
// 请求响应结束之后执行拦截方法
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable ModelAndView modelAndView) throws Exception {
}
5、配置类
-
疑问
-
如何编写拦截器
-
拦截器拦截哪些请求
-
前置拦截方法如何判断用户是否登录过
-
拦截方法如何做请求转发或者是重定向
-
6、拦截器的优先级问题
-
@Order(value=整数) 整数越大优先级越低,数字越小优先级越高
第十六章 Spring MVC的全局配置
1、配置文件
-
application.properties
-
application.yml
-
简单的配置
2、配置类进行配置
总结
以上就是今天要讲的内容,本文仅介绍了Spring Boot 框架。