当前位置: 首页 > news >正文

springboot(三)

视频链接: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

实现步骤:

  1. application.properties(yml):开启使用HiddenHttpMethodFilter过滤器
  2. 在请求页面中,包含_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:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

  • Kubernetes 常见面试题(六)
  • Linux安装禅道最新版
  • 【Bluetooth|蓝牙开发】十一、一文秒懂 | 超详细的Bluez交叉编译
  • TC8:SOMEIPSRV_FORMAT_01-10
  • 软考:信息安全工程师3
  • 接口(续)和Object类
  • 构造接口,免费查询快递物流
  • 被裁后一个offer都没有,测试人的问题在哪里?
  • 图像运算和图像增强一
  • 【C++】unordered map/set
  • 定时任务框架
  • C型9.4MM针脚距电磁阀插头
  • 【算法 | 实验8】分配最小页数(数组划分和最大值最小化问题)
  • rsync远程同步+inotify监控
  • 学会这个Python技能,就可以跟excel说再见了
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 2017-08-04 前端日报
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • javascript从右向左截取指定位数字符的3种方法
  • LeetCode29.两数相除 JavaScript
  • Python - 闭包Closure
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SQLServer之索引简介
  • windows下mongoDB的环境配置
  • 构造函数(constructor)与原型链(prototype)关系
  • 关于List、List?、ListObject的区别
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 力扣(LeetCode)21
  • 每天一个设计模式之命令模式
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 带你开发类似Pokemon Go的AR游戏
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)winform之ListView
  • *Django中的Ajax 纯js的书写样式1
  • .Net 8.0 新的变化
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET Micro Framework初体验
  • .NET MVC之AOP
  • .NET的数据绑定
  • //解决validator验证插件多个name相同只验证第一的问题
  • /bin/bash^M: bad interpreter: No such file or directory
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [.net]官方水晶报表的使用以演示下载
  • [<死锁专题>]
  • [Angular] 笔记 8:list/detail 页面以及@Input