WebSocket
前言名词解释HTTP:HTTP是应用层协议(在传输层使用 TCP,在网络层使用 IP 协议),是一种无状态(即每个请求都是一个新的请求)、无连接(每次连接只处理一个请求)协议,但是HTTP仍然可以借助Cookie(客户端数据储存)和Session(服务端数据储存)实现长连接(HTTP的长连接需要在请求头中加入Connection:keep-alive )。整个通信过程,客户端(浏览器)向服务端发送请求,服务端接收请求并返回响应信息。
Socket:与HTTP不一样,Socket不是一种协议,而是传输层的一种接口((应用程序与网络协议栈进行交互的接口),它是对 TCP/IP 协议的封装。
WebSocket:WebSocket和HTTP一样是应用层的协议。但是WebSocket是一种双向通信协议,是一种有状态协议。在WebSocket中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
长连接:
建立连接后不管是否使用,都保持TCP连接。但是长连接并不是永久连接。如果一段时间(可以在请求头中设置)内未发送请求,连接仍会断开。
过程:建立连接– ...
MyBatis拦截器
前言Mybatis拦截器注解的基本写法格式为:
123@Intercepts({ @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
说明:@Intercepts:标识该类是一个拦截器@Signature:拦截器相关属性设置
type拦截器的类型,总共有4种,按照执行的先后顺序为:
Executor:拦截执行器的方法。
ParameterHandler:拦截参数的处理。
ResultHandler:拦截结果集的处理。
StatementHandler:拦截Sql语法构建的处理,绝大部分我们是在这里设置我们的拦截器。
method可被拦截的方法,按照拦截器的不同类型,总共有下面这些方法:
拦截的类型
拦截的方法
Executor
update, query, flushStatements, commit, rollback,getTransaction ...
统一异常处理及返回结果
前言简单回顾下异常分类:
非受检异常:运行时异常
受检异常:编译时异常
异常的处理通常有两种方式:
第一种就是在当前类使用try-catch捕获异常并直接处理
另一种就是不在当前类处理,使用throws抛给上一级处理
如果在每个异常处都进行try-catch处理的话,无疑会造成代码的臃肿,且不够美观。所以,一般来说除非的必须在在当前类处理的异常,否则都会向上抛出,直到抛到controller层为止,在controller层进行统一的异常处理(不处理的话,再往上抛就抛到前端去了)。
统一进行异常处理的常见方式有两种:1. 使用注解 或者 2. 使用(AOP)拦截器
统一返回结果既然要统一进行异常处理了,自然需要统一下数据结果的返回格式,这里建议使用一个实体类进行处理,更加的可控易于管理修改。在实体类中对数据的返回格式进行下规范:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263import io. ...
Java Stream流
Animal类,在指定允许继承的子类时可以使用全限定名
12345public sealed class Animal permits Cat, Dog{//多个子类之间用,隔开 public void eat(){}}
Cat类
12345public final class Cat extends Animal{ public void eat(){ System.out.println("123"); }}
Dog类
12public sealed class Dog extends Animal permits Husky {}
Husky类
12public final class Husky extends Dog{}
Test类
1234567public class Test{ public static void main(String[] args)& ...
Lambda表达式
基本用法Lambda表达式本质:用作接口的实现(其实就是把之前实现接口的步骤简化了)。接口必须是函数式接口
一句话说明函数式接口:接口只有一个抽象方法函数式接口可以使用@FunctionalInterface注解进行校验,非函数式接口使用此注解会报错
-> :Lambda操作符->的左边:Lambda形参列表(即抽象方法中的形参列表)->的右边:Lambda体(即重写后的抽象方法体)格式:
1234567 <函数式接口> <变量名> = (参数1, 参数2...) -> { //方法体 }; // 或者 <函数式接口> <变量名> = (参数1, 参数2...) -> 表达式;
参数个数可为0至n个。多个参数需要用逗号,——分割。当参数个数为1时,括号可省略;当参数个数为0时,括号不可省略;参数前可以不加参数类型(不加会自动推导)。
Lambda 体,可以是一个表达式,也可以是语句块;如果是多条语句,需要使用大括号{}包裹;如果只有一条语句则可 ...
跨域网络资源文件下载
问题正常情况下是无法发送跨域请求下载文件的。以下载语雀为例:可以看到直接访问下载地址会报跨域错误
解决这个时候我们就可以通过nginx配置代理转发请求完成下载:
123location ^~ /yuque/ { proxy_pass https://app.nlark.com/yuque-desktop/;}
说明:当我们像本地发送/yuque/的请求时,nginx会转发请求(注意:末尾必须要加/不然就是代理请求,加了后才是转发请求),会将/yuque/转发成下面的https://app.nlark.com/yuque-desktop/
然后我们重新写下载请求:
123var xhr = new XMLHttpRequest();xhr.open("GET", "/yuque/1.1.4/Yuque-1.1.4.exe", true);xhr.send();
这次我们不直接访问语雀下载地址了,而是访问我们的本地地址,然后nginx会将我们的请求进行转发,将/yuque/转发为https://app.nlark.c ...
Vue(JavaScript)下载文件方式汇总
Window下载实现原理:直接用浏览器访问下载链接,唤起浏览器下载功能
123window.location.href = '下载链接';// 或者window.open('下载链接');
缺点:无法(从前端)自定义下载文件名,下载可预览文件(图片,音乐、视频等)时,会跳转新的界面
A标签下载实现原理:创建一个a标签,然后点击它,即把下面的标签用js创建出来
1<a href="下载链接" download="文件名(如:a.zip)">下载</a>
a标签download+url12345678const a = document.createElement('a')a.href = '下载链接'a.download = '文件名'a.style.display = 'none'a.target = 'downloadFile'document.body.appendChild( ...
Axios携带数据发送请求及后端接收方式
数据类型
方法
内容类型(Content-Type)
编码方式
GET
\
Query String Parameters
POST
application/json
Request Payload
POST
application/x-www-form-urlencoded
Form Data
POST
multipart/form-data
Form Data
Content-Type,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件。
application/json:参数的类型是JSON,后端一般用实体类对象或者具体的参数接收,还可以使用集合接收。
application/x-www-form-urlencoded:参数的类型是被编码过的表单数据,后端一般用实体类对象或者具体的参数接收,还可以从Paramer中获取。
multipart/form-data:参数的类型是表单数据,后端一般用实体类对象或者具体的参数接收,还可以从Paramer中获取。
编码方式
Query String Pa ...
将本地项目推送到远程仓库
IDEA中推送本地仓库与远程仓库一致创建本地仓库
如果未设置此步的话,IDEA将会在顶部菜单显示VCS,而不会显示Git功能
依次打开:文件 | 设置 | 版本控制 | 目录映射;将当前项目路径映射为Git仓库英文版对应地址:
提交本地项目将本地项目提交到本地仓库(git add–>git commit);
关联远程仓库点击Git–>管理远程英文版对应:添加远程仓库地址,亦可自定义别名
将远程仓库项目拉取到本地Git–>拉取(pull)选择要拉取的的分支,如果没有出现,按照提示,多刷新几次
将本地仓库项目推送到远程仓库Git–>推送(push)
本地仓库与远程仓库不一致如果本地仓库与远程仓库不一致,那么所有本地操作都是和之前一致的。唯一不同的就是最后拉取和推送的时候会因为本地仓库与远程仓库不一致造成各种报错。
以防万一,在进行操作前可以新建一个临时分支,给本地分支做个备份
首先是Git拉取失败,报错:
1234Git 拉取失败From github.com:ooahz/XXXXrefusing to merge unrelated histori ...
腾讯云限时免费升配活动
打开腾讯云服务器实例,点击更多–>升级套餐,
然后就可以看到免费升配的活动了
升级后: