自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 【 WebSocket 框架 】

WebSocket 是从 HTML5 开始支持的一种网页端和服务端保持长连接的 消息推送机制理解消息推送:传统的 web 程序, 都是属于 “一问一答” 的形式. 客户端给服务器发送了一个 HTTP 请求, 服务器给客户端返回一个 HTTP 响应.这种情况下, 服务器是属于被动的一方. 如果客户端不主动发起请求, 服务器就无法主动给客户端响应.像五子棋这样的程序, 或者聊天这样的程序, 都是非常依赖 “消息推送” 的. 如果只是使用原生的 HTTP 协议, 要想实现消息推送一般需要通过 “轮询。

2023-05-16 10:55:11 1338 1

原创 【 五子棋对战平台(java_gobang) 】

核心功能:核心技术:注意: WebSocket 和 canvas API 是实现本项目的两个核心技术,前者我们后续会稍许讲解,后者涉及到前端知识,我们就不多赘述,大家可参考以下链接去了解更多关于 canvas 的知识点!https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API登录注册游戏大厅游戏房间,及分出胜负后的效果创建一个springboot项目,具体步骤与前面的博客记录一样,这里就不再重复赘述,大家自行参考以下博客:1.spring

2023-05-15 21:19:46 620

原创 【 在线音乐平台(onlinemusic) 】

彩虹表:彩虹表就是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合,不一定是针对MD5算法的,各种算法的都有,有了它可以快速的破解各类密码。更安全的做法是加盐或者长密码等做法,盐是在每个密码中加入一些单词来变成一个新的密码,存入数据库当中,让整个加密的字符串变的更长,破解时间变慢。相对来说,BCrypt比MD5更安全,但加密更慢。MD5加密: 是不加盐的单向Hash,不可逆的加密算法,同一个密码经过hash的时候生成的是同一个hash值,在大多数的情况下,有些经过md5加密的方法将会被破解。

2023-05-11 11:51:21 742

原创 【 Spring 事务传播机制 】

而 controller 中的添加方法我们设置了事务的,该添加方法调用了用户添加和日志添加方法,所以他们两的事务直接加入到了外部方法事务中,成为了一个整体!即外部方法事务是否存在已经不重要了,两个添加方法都创建了各自的事务,且互不干扰。catch 将添加日志中的异常捕获是使用 NESTED 的前提,如果不这样做的话日志添加中的回滚操作会持续往上找调⽤它的⽅法和事务进行回滚,最终我们的外部方法事务也会被回滚,所以即使用户添加操作没有异常出现,该操作也会被回滚,最终的结果是⽤户表和⽇志表都没有添加任何数据!

2023-04-26 21:07:46 574 2

原创 【 Spring 事务 】

如果我仅仅只是开启了事务,而不进行提交事务或回滚事务,这时我的操作也会达到回滚的效果。因为当你没有使用 commit 提交事务时,系统会认为没有提交事务,业务操作会自动回滚,因此数据不会持久化,这是一种保护机制,避免误提交!● 脏读:⼀个事务读取到了另⼀个事务修改的数据之后,后⼀个事务⼜进⾏了回滚操作,从⽽导致第⼀个事务读取的数据是错误的。设置事务的隔离级别是⽤来保障多个并发事务执⾏更可控,更符合操作者预期的,为了防⽌其他的事务影响当前事务执⾏的⼀种策略。将事务提交的代码注释掉,添加事务回滚代码。

2023-04-26 17:19:19 882 1

原创 【 SpringBoot 统⼀功能处理 】

我们发现这个⽅法在执⾏时会查找所有使⽤ @ControllerAdvice 的类,这些类会被保存在容器中,一但发⽣某个事件时,调⽤相应的 Advice ⽅法,⽐如返回数据前调⽤统⼀数据封装,⽐如发⽣异常是调⽤异常的Advice ⽅法实现。前面我们了解到被@ControllerAdvice修饰的类为 controller 通知类,当 controller 中的方法发生了相应的事件,就会进入该通知类中执行对应的方法,就比如前面的统一异常处理和统一返回格式处理。并没有通过 Exception!

2023-04-26 14:05:47 486

原创 【 Spring AOP 】

AOP(Aspect Oriented Programming):⾯向切⾯编程,它是⼀种思想,它是对某⼀类事情的集中处理。⽐如⽤户登录权限的效验,没学 AOP 之前,我们所有需要判断⽤户登录的⻚⾯(中的⽅法),都要各⾃实现或调⽤⽤户验证的⽅法,然⽽有了 AOP 之后,我们只需要在某⼀处配置⼀下,所有需要判断⽤户登录⻚⾯(中的⽅法)就全部可以实现⽤户登录验证了,不再需要每个⽅法中都写相同的⽤户登录验证了。

2023-04-25 14:46:45 372

原创 【 动态SQL 的使⽤ 】

答案是肯定的,我们可以思考将所有id 放在一个集合里面,然后直接遍历集合就行了,此时就可以考虑到 < foreach >标签了。注册分为两种字段:必填字段和⾮必填字段,那如果在添加⽤户的时候有不确定的字段传⼊,程序应该如何实现呢?传⼊的⽤户对象,根据属性做where条件查询,⽤户对象中属性不为 null 的,都为查询条件。那是否有更简便的做法呢。之前的插⼊⽤户功能,只是有⼀个 photo 字段可能是选填项,如果有多个字段,⼀般考虑使⽤。由此可见,我们的 if 标签起到了作用,那它的语法到底是什么意思呢?

2023-04-24 20:38:39 351

原创 【 Spring Mybatis 复杂的查询操作 】

进行多表联查时,如果两个表有相同的字段,前面表的该字段会将后面表的该字段覆盖,如两个表都存在id字段,当修改userinfo中admin的id=2时,运行结果还是此id=1,确实被articleinfo中的id=1给覆盖 所以可以采用加前缀方法 columnPrefix=“u_” 解决。但是直接替换参数又会产生严重的弊端,如果传来的参数不合法可能会对数据库中的数据造成严重的威胁,如 SQL 注入问题!我们发现,虽然输入了不正确的密码,但还是得到了该用户正确的信息,这就是一个非常恐怖的事情了!

2023-04-24 16:50:49 587

原创 【 SpringBoot单元测试 和 Mybatis 增,删,改 操作 】

如果使用的是科学版IDEA,在Test测试代码中使用 @Autowired 注入注解会报错因为:@Mapper来自mybatis框架,而@Autowired 来自 spring,没有兼容性。单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。下面示例为了方便,我们就不依次完成各层书写,只需要把接口层补充完整,并完成 xml 文件的代码,再通过单元测试来验证结果!显而易见,我们成功的删除了 id=42 的用户信息!显而易见,我们成功的添加了一个用户!

2023-04-23 15:04:31 1530 1

原创 【 初识 Spring MyBatis 查询数据库 】

对于 JDBC 来说,整个操作⾮常的繁琐,我们不但要拼接每⼀个参数,⽽且还要按照模板代码的⽅式,⼀步步的操作数据库,并且在每次操作完,还要⼿动关闭连接等,⽽所有的这些操作步骤都需要在每个⽅法中重复书写。添加 MyBatis 框架⽀持分为两种情况:⼀种情况是对⾃⼰之前的 Spring 项⽬进⾏升级,另⼀种情况是创建⼀个全新的 MyBatis 和 Spring Boot 的项⽬,下⾯我们分别来演示这两种情况的具体实现。因此这两个都是需要添加的。由此可见,成功的查询到了 数据库中的用户信息!

2023-04-23 11:09:35 505

原创 【 Spring MVC 核心功能(三) - 输出数据】

以上就是他两的本质区别,通俗的讲,如果是请求转发,你向服务器发送了一个页面跳转的请求,而该服务器直接将你要跳转的页面返回给你。如果是请求重定向,你向服务器发送了一个页面跳转的请求,该服务器没有直接发送该页面,而是将这个页面的地址返回给你,让你自己主动对跳转页面发起请求。此时我们发现,当使用 http://127.0.0.1:8080/p/redirect 发送请求时,是先得到了该请求的响应,其中返回了一个重要信息 Location,就是我们要跳转的页面。一定不要点击Restore Defaults!

2023-04-11 19:28:20 872

原创 【 Spring MVC 核心功能(二) - 获取参数(下)】

之前我们讲过,Spring MVC 是基于 Servlet API 构建的原始 Web 框架,所以在 MVC项目中,我们可以直接使用 HttpServletRequest 以及 HttpServletResponse 等Servlet API。在实际开发中,我们经常会涉及多个平台共同开发!有时客户端会通过 post 方式发送 json 格式的请求,那后端就可以通过 @RequestBody 注解来获取到 json 格式的请求。当你想使用注解获取多个 Cookie 时,就多添加几个注解!

2023-04-11 16:31:04 548

原创 【 Spring MVC 核心功能(二) - 获取参数(上)】

某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 不⼀致,⽐如前端传递了⼀个time 给后端,⽽后端⼜是用 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使⽤。这显然不现实,这时我们就可以通过传入对象来解决!当有多个参数时,前后端进⾏参数匹配时,是以参数的名称进⾏匹配的,因此参数的位置是不影响后端获取参数的结果。如果我们的实际业务前端的参数是⼀个⾮必传的参数,我们可以通过设置 @RequestParam 中的。来重命名后端的参数值。

2023-04-11 11:31:26 387

原创 【 Spring MVC 核心功能(一) - 使用注解实现 URL 路由映射】

RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的路由映射:所谓的路由映射指的是,当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射。

2023-04-11 09:36:14 778

原创 【 初识 Spring MVC 程序开发 】

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),它常被称“SpringMVC”。Spring MVC 是⼀个 Web 框架。Spring MVC 是基于 Servlet API 构建的。然⽽要真正的理解什么是 Spring MVC?我们⾸先要搞清楚什么是 MVC?

2023-04-11 08:38:19 376

原创 【 SpringBoot ⽇志⽂件 】

在程序中得到⽇志对象使⽤⽇志对象的相关语法输出要打印的内容⽇志是程序中的重要组成部分,使⽤⽇志可以快速的发现和定位问题,Spring Boot 内容了⽇志框架,默认情况下使⽤的是 info ⽇志级别将⽇志输出到控制台的,我们可以通过 lombok 提供的 @Slf4j 注解和 log 对象快速的打印⾃定义⽇志,⽇志包含 6 个级别。⽇志级别依次提升,⽽⽇志界别越⾼,收到的⽇志信息也就越少,我们可以通过配置⽇志的保存名称或保存⽬录来将⽇志永久地保存下来。

2023-04-10 12:39:48 347

原创 【 SpringBoot 配置⽂件 】

properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂冒号加空格的⽅式设置,并且空格不可省略properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题。

2023-04-10 09:39:57 425

原创 【 SpringBoot概念、创建和运⾏ 】

新建的 Spring Boot 项⽬⽬录如下:详细介绍如下:src/main/java 为 Java 源代码。src/main/resources 为静态资源或配置⽂件:/static:静态资源⽂件夹;/templates:模版资源⽂件夹其中的 DemoApplication 为启动类,而 application.yml 为项目配置文件,后续会介绍快速集成框架,Spring Boot 提供了启动添加依赖的功能,⽤于秒级集成各种框架。

2023-04-09 15:58:51 354

原创 【 Bean 作⽤域和⽣命周期 】

限定程序中变量的可⽤范围叫做作⽤域,或者说在源代码中定义变量的某个区域就叫做作⽤域⽽ Bean 的作⽤域是指 Bean 在 Spring 整个框架中的某种⾏为模式,⽐如 singleton 单例作⽤域,就表示 Bean 在整个 Spring 中只有⼀份,它是全局共享的,那么当其他⼈修改了这个值之后,那么另⼀个⼈读取到的就是被修改的值。

2023-04-03 18:41:32 349

原创 【 Spring 更简单的读取和存储对象 】

⽐如陕⻄的⻋牌号就是:陕X:XXXXXX,北京的⻋牌号:京X:XXXXXX,⼀样。甚⾄⼀个省不同的县区也是不同的,⽐如⻄安就是,陕A:XXXXX,咸阳:陕B:XXXXXX,宝鸡,陕C:XXXXXX,⼀样。经过前⾯的学习,我们已经可以实现基本的 Spring 读取和存储对象的操作了,但在操作的过程中我们发现读取和存储对象并没有想象中的那么“简单”,所以接下来我们要学习更加简单的操作 Bean 对象的⽅法。通过上述示例,我们可以看出,通常我们 bean 使⽤的都是标准的⼤驼峰命名,⽽。

2023-04-03 17:07:29 187

原创 【 Spring 创建和使⽤ 】

经过前⾯的学习我们已经知道了,Spring 就是⼀个包含了众多⼯具⽅法的 IoC 容器。将对象存储到容器(Spring)中从容器中将对象取出来Java 语⾔中对象也叫做 Bean,所以后⾯咱们再遇到对象就以 Bean 著称操作容器之前,先要有容器,所以先要得到容器。存对象a. 创建 Bean(普通类)。b. 将 Bean 注册(配置)到 spring-confing.xml 中。取对象a. 得到 Spring 上下⽂,并读取到 Spring 的配置⽂件。

2023-04-03 14:40:11 260

原创 【 Spring 核⼼与设计思想 】

容器是⽤来容纳某种物品的(基本)装置——百度百科之前课程我们接触的容器有哪些?List/Map -> 数据存储容器Tomcat -> Servlet 容器Spring 也是⼀个容器,Spring 是什么容器呢?Spring 是⼀个 IoC 容器什么是 IoC?IoC = Inversion of Control 翻译成中⽂是“控制反转”的意思,也就是说 Spring 是⼀个“控制反转”的容器,怎么理解这句话呢?

2023-04-03 11:42:38 208

原创 【 JavaEE 进阶导读 】

完成了自己的第一个 Servlet 程序,会发现其项目流程十分繁琐且低效,并且稍有不慎就会导致项目失败。⽽以上痛点问题,都可以通过 JavaEE 进阶框架解决

2023-04-03 09:41:07 105

原创 【 Servlet API 】

这个 ajax 请求的 URL 路径. 代码中写的 url: 'hellodoPost’不加 /, 为一个相对路径, 相对于当前test.html的路径,而test.html的路径就是HelloWorldservlet 最终真实发送的请求的 URL 路径为 /HelloWorldservlet/hellodoPost。重新部署程序, 通过 URL http://127.0.0.1:8080/ServletHelloWorld/testPost.html 访问, 可以。

2023-03-30 17:17:07 1032

原创 【 Servlet 运行原理 】

于 HelloServlet 就是 Servlet 的子类.接下来, 在 Tomcat 启动阶段, Tomcat 已经根据注解的描述, 创建了 HelloServlet 的实例, 然后把这个实例放到了 Servlet 数组中.后面我们根据请求的 URL 从数组中获取到了该 HelloServlet 实例, 但是我们是通过 Servlet ins这样的父类引用来获取HelloServlet 实例的.最后, 我们通过 ins.doGet() 这样的代码调用 doGet 的时候,

2023-03-29 17:04:57 551

原创 【 初识 Servlet 并完成第一个servlet程序 】

初次接触 Servlet 程序会非常繁琐,步骤非常多,稍不注意就会出现错误.我们不光要熟悉 Servlet代码的基本写法,也要学会排查错误的思路.结合之前所学的HTTP协议可以让我们有效的找出错误,让我们的调试事半功倍.4xx 的状态码表示路径不存在, 往往需要检查 URL 是否正确, 和代码中设定的 Context Path 以及Servlet Path 是否一致.5xx 的状态码表示服务器出现错误, 往往需要观察页面提示的内容和 Tomcat 自身的日志, 观察是否存在报错.

2023-03-29 11:34:46 357

原创 【 Maven 】

Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。Maven的核心功能是合理叙述项目间的依赖关系,通俗点就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包,当然这是在该项目必须是maven项目的前提下。那么什么是maven项目?我们这样来理解,就是在java项目和web项目上裹了一层maven,本质上java项目还是java项目,web项目还是web项目。

2023-03-28 16:30:05 459

原创 【 Tomcat 】

HTTP服务器可以理解为就是在TCP服务器的基础上加上了一些额外的功能,

2023-03-28 11:26:08 561

原创 【 HTTPS 】

HTTPS 工作过程中涉及到的密钥有三组用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过.

2023-03-26 17:41:07 332

原创 【 构造 HTTP 请求 】

表示构造出的 HTTP 请求的 query string 的 key. query string 的 value 就是输入框的用户输入的内容.注意: 由于我们的服务器的地址是随便写的, 因此无法获取到正确的 HTTP 响应,后面自己写的服务器就可以针对前端提交的参数来处理请求并返回响应。通过ajax来构造出http请求,再通过js代码以回调函数的方式来处理这里的响应,并把得到的数据更新到页面上,从而不需要加载出新的页面。,即浏览器会加载出全新的页面,这显然是不合理的。

2023-03-26 16:10:59 335

原创 【 HTTP 响应 (Response) 】

HTTP响应各个部分中的属性基本与请求一致,重点掌握状态码

2023-03-25 18:27:56 2547

原创 【 HTTP 请求 (Request) 】

有的资料上说 “GET 传输的数据量小, POST 传输数据量大”. 这个也是不科学的, 标准没有规定 GET 的 URL 的长度, 也没有规定 POST 的 body 的长度. 传输数据量多少,完全取决于不同浏览器和不同服务器之间的实现区别..其中我们重点关注第三个. 里面包含了一个 gitee-session-n 这样的属性, 属性值是一串很长的加密之后的信息. 这个信息就是用户当前登陆的身份标识. 也称为 “

2023-03-25 16:43:50 1663

原创 【 初识 HTTP 协议 】

初次认识HTTP协议相关知识,通过抓包工具来了解协议的格式细节

2023-03-25 14:08:06 331

原创 【 网络编程套接字 -- TCP字节流套接字 】

Socket 是客户端Socket,或服务端中接收到客户端建立连接(accept方法)的请求后,返回的服务端Socket.不管是客户端还是服务端Socket,都是双方建立连接以后,保存的对端信息,及用来与对方收发数据的。每次都要进行 clientSocket.close();当处理完一次连接后就需要释放资源.对于ServerSocket和socket来说不需要自动释放资源,因为它们始终贯穿程序,最终会随着进程退出而释放。ServerSocket 是创建。上述代码还存在一个严重的问题,Socket的API。

2023-03-24 17:03:58 335

原创 【 网络编程套接字 -- UDP数据报套接字 】

构造UDP发送的数据报时,需要传入 SocketAddress ,该对象可使用 InetSocketAddress 来创建。getByName:在给定主机名的情况下确定主机的IP地址,如果参数为null,获得的是本机的IP地址。得到翻译功能的服务端,我们只需要继承上述服务端并重写 process 方法,来根据请求计算响应。完成一个简单的翻译功能.在客户端输入英文,服务端直接将该英文翻译成中文后返回。DatagramSocket 是UDP Socket,

2023-03-24 15:42:54 258

原创 【 网络编程套接字 -- Socket套接字 】

以上只是一次发送端的UDP数据报发送,及接收端的数据报接收,并没有返回的数据。来说,可以简单的理解为,传输数据是一块一块的,发送一块数据假如100个字节,必须一次发送,接收也必须一次接收100个字节,而不能分100次,每次接收1个字节。来说,可以简单的理解为,传输数据是基于IO流,流式数据的特征就是在IO流没有关闭的情况下,是无边界的数据,可以多次发送,也可以分开多次接收。对于UDP协议来说,具有无连接,面向数据报的特征,即每次都是没有建立连接,并且一次发送全部数据报,一次接收全部的数据报.

2023-03-24 13:41:52 183

原创 【 网络编程基础 】

网络编程指网络上的主机,通过不同的进程,以编程的方式实现网络通信(称为网络数据传输)当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程。特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。但是,我们一定要明确,我们的目的是提供网络上不同主机,基于网络来传输数据资源进程A:编程来获取网络资源进程B:编程来提供网络资源。

2023-03-24 10:55:20 235

原创 【 Java 中操作文件 】

Java 中通过类来对一个文件(包括目录)进行抽象的描述.注意,有 File 对象,并不代表真实存在该文件InputStream 只是一个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从文件中读取,所以使用方法:OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中,所以使用。

2023-03-23 15:51:07 218

原创 【 认识文件 】

如何在文件系统中如何定位我们的一个唯一的文件就成为当前要解决的问题,但这难不倒计算机科学家,因为从树型结构的角度来看,树中的每个结点都可以被一条。在计算机中,文件是一个广义的定义,不只是包含普通文件,还可以包含目录(目录文件).并且在操作系统中,还会使用文件来描述一些硬件设备或软件资源。同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,一种合乎自然的想法出现了,就是按照。即使是普通文件,根据其保存数据的不同,也经常被分为不同的类型,我们一般简单的划分为。

2023-03-22 11:24:24 174

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除