springMvc
前言
这个是引入依赖
但是这个旁边却有两个,这个是因为引入这个依赖的时候,这个依赖又引入了其他的依赖
这种依赖以冒号为分隔,分别是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)
但是这样很好看,就是不能正常运行了