视频链接:https://www.bilibili.com/video/BV1XQ4y1m7ex/?vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P58— P92
文章目录
- 1.接口架构风格-RESTful
- 1.1 认识REST
- 1.2 RESTful的注解
- 1.2.1 @PathVariable
- 1.2.2 @PostMapping
- 1.2.3 @DeleteMapping
- 1.2.4 @PutMapping
- 1.2.5 @GetMapping
- 1.2.6 @RestController
- 1.2.7 Postman
- 1.3 在页面中或者ajax中支持put和delete
- 1.4 REST注意url加上请求方式必须唯一
- 2.Springboot集成Redis
- 2.1 redis的java客户端
- 2.2 redis的windows版本
- 2.3 redis依赖项
- 2.4 配置redis服务器信息
- 2.5 RedisTemplate 添加数据到redis和从redis获取数据
- 2.6 StringRedisTemplate 添加数据到redis和从redis获取数据
- 2.7 对比 RedisTemplate和StringRedisTemplate 以及序列化
- 2.8 设置RedisTemplate的序列化
- 2.9 idea生成序列化版本号
- 2.10 json序列化
- 3.springboot集成Dubbo
- 3.1 创建公共接口项目
- 3.2 Dubbo和Zookeeper依赖
- 3.3 暴露服务提供者
- 3.4 dubbo的外部化配置
- 3.5 在启动类中加入@EnableDubbo
- 3.6 排除Log4j依赖
- 3.7 创建消费者
- 3.8 消费者调用提供者
- 3.9 集成Dubbo的步骤
- 4. springboot打包
- 4.1 打包为war
- 4.2 发布war到tomcat
- 4.3 创建jsp应用
- 4.4 打包应用为jar
- 4.5 jar和war的总结
1.接口架构风格-RESTful
接口(API ):可以指访问servlet , controller的url,调用其他程序的函数
1.1 认识REST
REST(英文:Representational State Transfer,简称REST,中文:表现层状态转移)
一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构理念和设计原则,基于这种理念和源则设计的接口可以更简洁,更有层次,REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。
任何的技术都可以实现这种理念,如果一个架构符合REST原则,就称它为RESTFul架构
比如我们要访问一个http接口: http://localhost:8080/boot/order?id=1021&status=1
采用RESTFul 风格则http地址为: http:/ /localhost:8080/boot/order/1021/1
表现层状态转移:
- 表现层就是视图层,显示资源的,通过视图页面,jsp等等显示操作资源的结果。
- 状态:资源变化
- 转移:资源可以变化的,资源能创建,new状态,资源创建后可以查询资源,能看到资源的内容,这个资源的内容,可以被修改,修改后资源和之前的不一样了
优点: 更简介,更有层次
一句话说明REST:使用url表示资源,使用http动作操作资源
REST中的要素:
用REST表示资源和对资源的操作。在互联网中,表示一个资源或者一个操作。资源使用url表示的,在互联网,使用的图片,视频,文本,网页等等都是资源。资源是用名词表示。
1.2 RESTful的注解
1.2.1 @PathVariable
从url中获取资源
package com.bjpowernode.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyRestController {//学习注解的使用//查询id = 1001的学生/***@PathVariabl(路径变量):获取url中的数据* 属性:value:路径变量名* 位置:放在控制器方法的形参前面* {stuId}:定义路径变量,stuId自定义名称*/@GetMapping("/student/{stuId}")public String queryStudent(@PathVariable("stuId") Integer studentId){return "查询学生studentId = " + studentId;}
}
测试效果:
1.2.2 @PostMapping
支持post请求方式,等同于@RequestMapping( method=RequestMethod.POST)
package com.bjpowernode.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyRestController {/***创建资源Post请求方式*/@PostMapping("/student/{name}/{age}")public String createStudent(@PathVariable("name") String name,@PathVariable("age") Integer age){return "创建资源 student:name = " + name + "#age = " + age;}
}
创建html页面:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h3>添加学生</h3><form action = "student/zhangsan/20" method = "post"><input type="submit" value="注册学生"></form>
</body>
</html>
测试:
点击后:
1.2.3 @DeleteMapping
支持delete请求方式,等同于@RequestMapping( method=RequestMethod.DELETE)
1.2.4 @PutMapping
等同于@RequestMapping( method=RequestMethod.PUT)
1.2.5 @GetMapping
支持的get请求方式,等同于@RequestMapping( method=RequestMethod.GET)
1.2.6 @RestController
复合注解,是@Controller 和@ResponseBody组合。
在类的上面使用@RestController ,表示当前类者的所有方法都加入了@ResponseBody
1.2.7 Postman
测试工具
使用Postman :可以测试get , post , put , delete等请求,不需要创建html文件
1.3 在页面中或者ajax中支持put和delete
post方法:
测试:
put方法:
测试:
此时需要下面的方法进行改变
在SpringMVC中有一个过滤器,支持post请求转为put ,delete
过滤器: org.springframework.web.filter.HiddenHttpMethodFilter
作用︰把请求中的post请求转为put , delete
实现步骤:
- application.properties(yml):开启使用HiddenHttpMethodFilter过滤器
- 在请求页面中,包含_method参数,他的值是put ,delete ,发起这个请求使用的post方式
1.4 REST注意url加上请求方式必须唯一
下面代码在输入http://Localhost:8080/myboot/student/20时候有歧义
上面的代码运行后,出现下面的错误:
2.Springboot集成Redis
2.1 redis的java客户端
- Redis是一个NoSQL数据庭,常作用缓存Cache使用。
- 通过Redis客户端可以使用多种语言在程序中,访问Redis 数据。java语言中使用的客户端库有Jedis,lettuce,Redisson等。
- Spring Boot中使用RedisTemplate模版类操作Redis 数据。
- Redis的数据类型: string , hash ,set ,zset , list
- Redis是一个中间件:是一个独立的服务器。
- java中著名的客户端︰Jedis , lettuce , Redisson
- Spring,SpringBoot中有一个RedisTemplate ( StringRedisTemplate ) ,处理和redis交互
需求:完善根据学生 id查询学生的功能,先从redis缓存中查找,如果找不到,再从数据库中查找,然后放到redis缓存中
2.2 redis的windows版本
Redis-x64-3.2.100.rar解压缩到一个非中文的目录
redis-server.exe:服务端,启动后,不要关闭
redis-cli.exe :客户端,访问redis中的数据
redisclient-win32.x86_64.2.0.jar : Redis图形界面客户端
执行方式︰在这个文件所在的目录,执行java -jar redisclient-win32.x86_64.2.0.jar
效果:
2.3 redis依赖项
2.4 配置redis服务器信息
2.5 RedisTemplate 添加数据到redis和从redis获取数据
controller中:
添加数据到redis
从redis获取数据:
测试:
在客户端redis查看:
2.6 StringRedisTemplate 添加数据到redis和从redis获取数据
controller中:
添加数据到redis
从redis获取数据:
测试:
2.7 对比 RedisTemplate和StringRedisTemplate 以及序列化
StringRedisTemplate : 把k,v都是作为String处理,使用的是String的序列化,可读性好
RedisTemplate : 把k ,v经过了序列化存到redis。k ,v是序列化的内容,不能直接识别【默认使用的jdk序列化,可以修改为其它的序列化】
序列化∶把对象转化为可传输的字节序列过程称为序列化。
反序列化:把字节序列还原为对象的过程称为反序列化。
什么情况下需要序列化?
凡是需要进行"跨平台存储"和"网络传输"的数据,都需要进行序列化。
本质上存储和网络传输都需要经过把一个对象状态保存成一种跨平台识别的字节格式,然后其他的平台才可以通过字节信息解析还原对象信息。
序列化的方式
序列化只是一种拆装组装对象的规则,那么这种规则肯定也可能有多种多样,比如现在常见的序列化方式有︰JDK (不支持跨语言)、JSON、XML、Hessian、Kryo(不支持跨语言)、Thrift、Protofbuff、
java的序列化︰把java对象转为byte[],二进制数据
json序列化: json序列化功能将对象转换为JSON格式或从JSON格式转换对象。例如把一个Student对象转换为JSON字符串(“name”…“李四”,“age”;29}),反序列化(将JSON字符串{“name”:“李四” , “age”:29}转换为Student对象)
2.8 设置RedisTemplate的序列化
在controller中:
在存取值之前,设置序列化
测试:
2.9 idea生成序列化版本号
2.10 json序列化
定义一个学生类:
controller:
测试:
反序列化:
测试:
3.springboot集成Dubbo
https:llgithub.com/apache/dubbo-spring-boot-project/blob/master/README CN.md
3.1 创建公共接口项目
独立的maven项目:定义了接口和数据类
3.2 Dubbo和Zookeeper依赖
公共项目的gav是指上面的创建的公共接口项目!
注意:dubbo依赖可以不加,因为在zookeeper依赖中有
3.3 暴露服务提供者
3.4 dubbo的外部化配置
3.5 在启动类中加入@EnableDubbo
3.6 排除Log4j依赖
3.7 创建消费者
在controller中定义:
在启动类中:
properties:
3.8 消费者调用提供者
先启动Zookeeper
测试:
3.9 集成Dubbo的步骤
4. springboot打包
Spring Boot可以打包为 war或ljar文件。以两种方式发布应用
4.1 打包为war
先添加依赖和插件:
定义jsp页面:
定义controller:
配置文件:
resource插件:
其它插件:
指定打包后的文件名称:
4.2 发布war到tomcat
主启动类继承 SpringBootServletInitializer可以使用外部tomcat。
SpringBootServletInitializer就是原有的web.xml文件的替代。使用了嵌入式Servlet,默认是不支持jsp.
定义打包类型:
进行打包:
最终效果:
运行:
4.3 创建jsp应用
添加依赖:
创建jsp页面:
创建controller:
添加插件:
配置类:
4.4 打包应用为jar
直接打包,结果:
注意:大部分步骤和war是一样的
4.5 jar和war的总结
打包为jar:
打包为war: