前言
这个是引入依赖
但是这个旁边却有两个,这个是因为引入这个依赖的时候,这个依赖又引入了其他的依赖
这种依赖以冒号为分隔,分别是groupid,artifactId和version
如何排包呢
可以这样排包
也可以借助插件
叫做Maven Helper
安装了这个之后,pom.xml后面就会有
这个
这个是依赖分析器
对于pom文件的修改一定要刷新
我们现在下载的jar是从中央仓库即国外下载的
我们大家都有本地仓库
这样就找到了
这个就是本地仓库
那如何修改本地仓库呢
直接把.m2这个文件夹拷贝走就可以了
远程仓库还有国内源
这个是settings.xml可以去我码云下载
我们加了一个阿里云的镜像
这样就会优先从阿里云下载了
这样就可以了,但是这个只是针对当前项目
这样就可以针对所有的项目进行设置了
springboot
idea社区版要使用springboot要先下载插件Spring Boot Helper
专业版不用下载
插件地址https://plugins.jetbrains.com/plugin/18622-spring-boot-helper/versions
但是这些都要收费
有一个免费的,但是适用idea2022版所以我们就不安装了
我们就用专业版的吧
然后就是慢慢下了
外部库那里有很多包的时候就是下载成功了
springboot3开始就要至少JDK17
这四个可以删掉
改类的名字要按shift+f6
因为这样改的话,也会把相关的类名改了
这就是第一个后端接口
其中路径和方法名可以不一样
如果环境问题无法启动
那么可以试一下把这三个文件删了,重新试一下
因为配置是在.idea这些东西中的
可以看出进程是24280,端口号是8080,协议是http
用的是Tomcat服务器
现在Tomcat已经被Spring集成了,不用安装
8080是tomcat的默认端口号
springMvc
我们创建springboot项目的时候是使用了springMvc的
集成了它的
MVC就和servlet差不多
这个也可以删掉
RestController的作用就是这个类有RestController注解,就会在这里找路径,不然不会考虑这个类的路径的
RequestMapping就是建立连接
它还可以写在类上面
这样就是大路径加小路径的访问方式
注解之间没有顺序
路径的/可以不加,这个可以自动加上的
但是通常不省
RequestMapping是即支持get请求,也支持post请求的
浏览器默认是get请求
所以我们搞一个post请求
这样写的意思就是只支持get请求
这样写的意思就是只支持get请求
注意fiddler会把postman拦截,所以用postman的时候不要用fiddler
参数名name与url中的name是对应的,是一样的才可以对应赋值
这个类型是自动转换的
用int也是可以的
但是最好使用Integer
类型也是要对应的,不要不对应
传递的参数,默认为String,后端接受时,根据后端的类型确定
现在开始传递多个参数
而且顺序没有影响
多个参数也是没有问题的
因为是key-value类型的
其实这个servlet的书写和上面那个是一样的功能
但是这个传递多个参数太麻烦了
不如分装成一个类
这就这样写就可以了
然后把gender改为Integer类型
这个就非常简单了
用INteger的时候name=的时候就是null,int类型的话就是0
现在给参数重命名
就是前端传的是username,后端要用name来接收
RequestParam的作用就是参数绑定,把url中的参数绑定过来
如果url中没有userName就会出错
注解里面只有一个参数的时候就是value,有多个的时候就是key-value的形式
如果这样写的话,就算userNAme不在url中也可以
意思就是这个注解可以不强制
但是还是不会取url中的name
所以前端中传的key必须是userName
现在开始传递数组
这样传入几个相同的key就是数组了
这样把参数写在一起也是可以了
我们现在用一下debug
先打红点
在点这个虫子
这样就可以了
这样就失败了
发现不行
因为这样发送请求默认是分装成数组的
所以需要转换成list
这样写就相当于把数组绑定成一个list了
现在开始讲传递JSON数据了
JSON就是一个对象表示法或者数组
可以在网上找一些JSON编辑器
JSON的使用要导入坐标,但是spring项目不用导入,已经集成了
Json是一个字符串,表示的是一个对象
现在开始传递Json
RequestBody意思就是在请求的正文中获取数据,原来我们是从请求的url中获取数据的
这个就要从body中传了
就不要从url中传递了
就是postman了
这样发给原来的p5是OK的
但是这个传递的不是Json,就是请求体中的key-value
这样就可以了
两个的差异就是一个是key-value在请求体中
一个是Json字符串的格式
如何获取url中的参数呢
这样写的意思就是
/{articleId}表示后面有articleId这个路径
@PathVariable(“articleId”)表示要用url中key为articleId,赋值给参数
注意(“articleId”)可以不写
那这样的话,参数名就要和{articleId}保持一致了
这样就不行了,就要加上(“articleId”)了
这样才对
意思就是要重命名的话,就要加上,不重命名的话,就不用加上
这个是多个参数的时候
这样就会出错,因为我们的路径要求是两个参数的
都是要求有的
这样就不会出错了,因为第二个注解不强制了
但是还是不行
因为路径已经写死了
在加上一个/不行
一般都是id放在url中
最后就是上传文件了
这个就是文件了
这样就可以选择了
500是后端的错误
这个是因为上传的时候没有key
没有参数名称
上传的就是二进制
如果url不为file的话,如何进行重命名呢
cookie和session
先来获取cookie
可以看出cokies是null,所以报错了
所以要先添加cookie,在去访问
浏览器上是可以添加cookie的
在这里就可以添加cookie了
这样就添加成功了
现在讲一下注解的方式获取cookie,原来是原始的方式获取cookie
postman就不行了吗,因为它没有设置cookie的
这就有了两种方式获取cookie
获取多个就要多个注解
第一种方法可以获取全部cookie
但是参数名和key一样的话,注解里面的字是可以省略的
注意postman也是可以增加cookie的
就在右上角的位置
现在学习获取session
我们从Cookie中获取SessionId,根据SessionID获取Session对象
然后就是造一些Session----》服务器上的----》代码设置
但是在不同的浏览器上拿不到我们刚刚设置的Session,这个是因为会话不一样
不同会话的SESSIONID是不一样的
拿到的session就是不一样的
服务器端存储的不同的session对象,每个session对象都有不同的sessionid,每个session对象就存有session
id而且是可以修改的
现在学习获取session的第二种方式
注意:Session存储在服务器的内存上,所以服务重启时,session会丢失
所以又要先set在get
这是第二种获取session方式
现在通过注解的方式获取session
获取header
比如获取user-agent这种信息
现在讲一下注解的方式
现在学习一下postman如何增加cookie
点击save
就可以了
这里可以伪造header
cookie前端后端都可以伪造
session只能后端写代码
响应
静态资源的路径是从static开始看的
现在我们希望后端返回这个页面
首先这样写肯定是不行的
RestController要改为Controller
这样就可以了
所以返回页面就要用Controller了
RestController是基于Controller实现的
看得出来RestController=Controller+ResponseBody
ResponseBody表示返回数据
因为很久以前前后端没有分离,所以可能会返回页面
现在分离了,就不用返回了
所以这样写就和RestController效果一样
ResponseBody既是类注解也是方法注解
类注解表示所有方法都返回数据
方法注解只表示该方法返回数据
其余的管不着
Controller表示返回一个页面,一个视图,如果这个视图不存在就会出错
现在讲一下返回html代码片段
这个明显返回的是数据
只要返回的数据里面带有html就会进行解析
现在讲一下返回json
这样返回的默认就是json格式的
这里就可以看出,返回类型是Json格式的,这个是自动设置的Json
返回类就是Json
现在设置状态码,这个状态码是自动设置的
当然也可以我们来设置
这个就要用到response了
设置header
现在开始设置header
刚刚是获取响应里面的header
value=path
produces是指定响应的类型
这个就可以看出我们返回的是字符串类型的
我们也可以把这个设置为Json
这就是Json了
这里就多了一个header了
现在学习如何设置cookie
这样就可以了
加法计算器
然后就可以了
用户登录
ctrl+f5强刷,因为浏览器会把页面缓存了,导致效果不变
这个参数既可以在这里设置,也可以在url中设置,都是一样的
post,get都能读取
所以现在后端没有问题了
开始弄前端
这样就成功了
ctrl+f5强制刷新
ctrl+shift+delete删除缓存
ajax是通过data传递的参数,是异步的
表单是通过name取的名字,是同步的
留言板
我们这个代码的缺点就是一刷新就全部没有了
启动一次程序,就是一个进程,我们把数据存入内存中,每次刷新就不会消失了
我、先来后端,我们要定义两个接口,一个是获取全部留言信息
第二个是发表新留言,存入内存
创建一个类,每次存储一个留言
这样后端就没有问题了,该前端了
插曲
现在讲一下lombok
这样写就表示只有from有get方法
因为spring有版本管理,就是你引入什么包,版本可以不用写,spring可以帮你决定
你写了版本,就不是spring里面的版本了
现在增加一个插件
这个文件在pom.xml中使用
点击OK
这里可以增加依赖
继续
现在继续开始留言板的开发,主要是前端代码了
这里是一个类来接受的,对应要传入JSon的,要传入JSon就要RequestBody这个注解
对应前端传入JSon
如果要求是post请求的普通参数,没有要求JSon数据的话
,那么既可以
这样
也可以这样
前端这样写data
前端默认传入的是application/x-www-form-urlencoded这个类型的
如果要指定传入JSon类型
那么还要增加两个条件
这样就可以发生JSon数据了
如果后端add返回的是String类型的,那么如何转化为JSon呢
这样后端返回的就是String了
这样写就可以了
图书管理
直接创建一个新项目
404----》检查资源路径
405检查请求方式
400检查参数
415检查请求类型
5xxx直接看后端日志
ctrl+f5强制刷新,可以干掉缓存
我们这个前端代码引入了bootstrap,这个是组件库,就和element是一样的
bootstrap
去百度搜索html模板网站,就会很简单的开发前端了
注意如果是从body里面传入的数据,那么一定是post的
所以一定要记得改
这样后端就没有问题了
这样就可以了
三层架构
现在我们把我们的代码搞成三层架构模型
分别是dao(增删查改),service(逻辑,调用到),controller(请求响应,调用service)
但是这样很好看,就是不能正常运行了