springboot(三)

news/2024/4/20 5:30:08/文章来源:https://blog.csdn.net/weixin_49883619/article/details/127235731

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_398892.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式缓存

本文介绍关于缓存的常用设计模式。以及如何保证缓存的一致性进行分类讨论。 还会介绍关于缓存失效的常见问题&#xff0c;以及针对缓存失效的解决方法。 在高并发的环境下&#xff0c;比如春节抢票大战&#xff0c;一到放票的时间节点&#xff0c;分分钟大量用户以及黄牛的各种…

魔改xxl-job,彻底告别手动配置任务!

xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单,但是苦于手动注册任务久矣,今天就来魔改一下,实现任务的自动注册!原创:微信公众号 码农参上,欢迎分享,转载请保留出处。哈喽大家好啊,我是Hydra。 xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单、…

12个小细节让普源示波器使用更加高效(上)

俗话说细节决定成败&#xff0c;示波器作为电子测量的第一工具&#xff0c;虽然使用简单&#xff0c;但并不是每个人都能注意到细节。运用好细节&#xff0c;可以使你的示波器使用更加的便捷。以下由安泰测试带来普源示波器测量相关的12个小细节可作为示波器常识快速自检的小文…

Spring Boot(4):@Import注解和@Conditional注解

说明&#xff1a;基于atguigu学习笔记。 在了解spring boot自动配置原理前&#xff0c;再来了解下两个注解Import注解和Conditional注解。 Import Import注解主要用于导入某些特殊的Bean&#xff0c;这些特殊的Bean和Bean Definitaion 有关。 主要用于导入Configuration 类…

Python实现桌面挂件,做一只可爱的桌面宠物~

文章目录嗨嗨&#xff0c;大家好 ~ 我是小圆相关文件开发工具相关模块&#xff1a;环境搭建安装原理简介1.初始化一个窗口组件&#xff1a;效果2.设置一下窗口的属性&#xff1a;随机导入一张图片&#xff0c;看效果随机导入一个宠物的所有图片的函数代码3.宠物随机出现在桌面上…

服务端渲染的探索与实践

服务端渲染(SSR)近两年炒得很火热,相信各位同学对这个名词多少有所耳闻。本节我们将围绕“是什么”(服务端渲染的运行机制)、“为什么”(服务端渲染解决了什么性能问题 )、“怎么做”(服务端渲染的应用实例与使用场景)这三个点,对服务端渲染进行探索。 服务端渲染是一…

GOM引擎登录器的研究,逆向技术在这款GOM20151108引擎上是一个大舞台

最近遇到一个逆向类课题&#xff0c;是关于GOM20151108版本对应登录器研究。刚接触传奇的时候是2002年&#xff0c;那时候网吧玩SF&#xff0c;都是手动用IP直接连接&#xff0c;当时的一款 联创传奇 很好玩&#xff0c;有传送戒子&#xff0c;木域戒指&#xff0c;土域戒指&am…

不会 Vue,但不影响我学 diff 算法

前言 现在社会各行各业大都面临着寒冬&#xff0c;互联网行业最近还出现了裁员潮&#xff0c;导致前端是越来越卷&#xff0c;普通学校的应届生不仅要跟985、211毕业的学生以及研究生进行竞争&#xff0c;甚至还需要和最近刚被裁的、有了几年工作经验的程序员竞争&#xff0c;…

page.json

uni-app需要给page.json文件需要进行配置路由,否则会不报错,也跳转不过去

【数模/启发式算法】蚁群算法

文章目录简介符号说明核心思想流程图文章使用到的测试函数基本步骤蚁群算法代码简介 蚁群算法是一种用来寻找优化路径的概率型算法。它由Marco Dorigo于1992年在他的博士论文中提出&#xff0c;其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。 这种算法具有分布计算、信息正…

Arduino播放声音

玩软件有点虚无&#xff0c;没有实际东西&#xff0c;所以接下来要体验下硬件与软件结合。 1 Arduino Arduino是一种包含硬件&#xff08;各种型号的Arduino板&#xff09;和软件&#xff08;Arduino IDE&#xff09;的开源电子平台。硬件部分是可以用来做电路连接的Arduino电…

小白学习Java第四十三天

Git概述 &#xff08;一&#xff09;什么是Git Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理&#xff0c;是软件配置管理的核心思想之一…

设计模式学习笔记(五) - 观察者模式 Observer

目录 观察者模式 Observer 一、背景描述 Version 1 (面向过程) Version 2 (面向对象) Version 3 (单个观察者) Version 4 (多个观察者) Version 5 (分离观察者与被观察者) 二、不同事件下的观察者模式 三、事件本身也可以形成继承体系 四、观察者常用场景 观察者模式…

Selenium基础 — 鼠标操作

1、鼠标事件介绍 前面例子中我们已经学习到可以用click()来模拟鼠标的单击操作&#xff0c;而我们在实际的web产品测试中发现&#xff0c;有关鼠标的操作&#xff0c;不单单只有单击&#xff0c;有时候还要用到右击&#xff0c;双击&#xff0c;拖动等操作&#xff0c;这些操作…

【Nginx】认识与基本使用 Nginx 实现反向代理、配置负载均衡

文章目录1. Nginx 概述1.1 Nginx 介绍1.2 Nginx 下载和安装1.3 Nginx 目录结构2. Nginx 命令3. Nginx 配置文件结构4. Nginx 具体应用4.1 部署静态资源4.2 反向代理4.2.1 介绍4.2.2 配置反向代理4.3 负载均衡4.3.1 介绍4.3.2 配置负载均衡4.3.3 负载均衡策略1. Nginx 概述 1.1…

Ubuntu开机界面出现“error found when loading /root/.profile”

原因 今天一开始按照一篇文章&#xff0c;想把普通用户的权限提高到最高权限&#xff0c;修改了**/etc/passwd**文件&#xff0c;然后重启&#xff0c;发现之前的用户进不去了&#xff0c;一开机就出现如下信息 解决方法 1、重启虚拟机进入recovery模式&#xff08;长按shi…

计算机网络-第一章 | 王道考研

目录 一、基本介绍 定义 功能 组成 分类 标准化工作 标准的分类 标准化工作相关组织 二、性能指标 ※ 速率 带宽 ※吞吐量 时延 时延带宽积 往返时延RTT 利用率 三、分层结构 ※ 分层基本规则 正式认识分层 7层OSI参考模型 怎么来的 怎么分的 怎么传的…

<特殊类设计与单例模式>——《C++高阶》

目录 1.请设计一个类&#xff0c;不能被拷贝 2. 请设计一个类&#xff0c;只能在堆上创建对象 3. 请设计一个类&#xff0c;只能在栈上创建对象 4. 请设计一个类&#xff0c;不能被继承 5. 请设计一个类&#xff0c;只能创建一个对象(单例模式) 后记&#xff1a;●由于…

GD32F307VC+WIN10+VSCODE+GCC+JLINK环境build

为了构建Cortex M系列单片机免费开源的开发环境&#xff0c;网络上了解来看VSCODEGCCJLINK是一套比较高效的组合方式&#xff0c;下面记录环境搭建的流程。 我这边的PC环境为 WIN10专业版64bit。 工具准备 1. arm-none-eabi-gcc下载及安装 官网下载链接&#xff1a;Downloa…

c++数据结构:数组和向量

线性表&#xff1a; 在数据元素的非空有限集中 存在唯一的一个被叫做“第一个”的数据元素存在唯一的一个被叫做“最后一个”的数据元素除第一个之外&#xff0c;集合中的每个数据元素均只有一个前驱除最后一个之外&#xff0c;每个集合元素均只有一个后继数据结构中线性结构指…