自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

梦幻天空

talk is cheap,show me the code

  • 博客(379)
  • 资源 (3)
  • 收藏
  • 关注

原创 软件推荐:AList

AList是一个开源Web服务,可以添加多种网盘,将你的多个网盘应用集成到一个统一应用中使用,并且还支持通过WebDAV服务映射到操作系统本地目录使用。

2022-11-04 18:35:11 695

原创 Java编程笔记26:HTTP

HTTP协议实际上是基于TCP的应用层协议,规定了请求报文和响应报文等。参考HTTP协议的规定,我们可以实现一个简单的HTTP Server。前文中我介绍了如何实现简单的TCP服务端和客户端,本文将在之前示例的基础上实现一个简单的HTTP服务。HTTP的基本概念推荐阅读,或者。

2022-11-01 14:55:27 132

原创 Java编程笔记25:TCP

TCP和UDP通信可以说是网络应用的起点,原理方面的内容不在本文讨论范围内,这里直接展示如何用Java创建一个基于TCP的CS结构的网络应用。

2022-10-31 17:40:57 94

原创 从零开始 Spring Boot 26:AOP

AOP全称为Aspect Oriented Programming,即面向切面编程。一次HTTP请求大概可以用下图表示:如果用MVC的观点划分Spring Boot应用内的消息流转,大概可以用下图表示:如果我们可以在请求调用和返回的某个阶段“切一刀”下去,对消息进行拦截,然后执行特定的处理后再拼装回去,岂不是就可以在不影响现有代码的情况下完成类似上边的功能了?这就是AOP,切下去的断面就是切面(Aspect)。

2022-10-31 11:29:30 135

原创 从零开始 Spring Boot 25:MyBatis II

在中我介绍了MyBatis的一些基本功能和用法,下文介绍遗漏的部分。本文的示例代码都基于的最终示例修改而来,可以通过获取相应的代码。

2022-10-27 17:43:32 436

原创 从零开始 Spring Boot 24:处理时间

本文示例基于的最终示例代码修改而来,可以从获取完整示例。在中我详细说明了如何在Spring Boot项目中处理枚举类型,其中包含在接口的输入和输出阶段处理枚举,除了枚举以外,通常我们还需要处理时间类型,具体来说就是标准类库中的或LocalDate类。和LocalDate是JDK8引入的时间类,相比Date和DateTime,它们本身包含了时区概念,不需要额外处理时区的问题,而且它们的相关格式化处理函数都是线程安全的。所以Java程序中的时间都应该使用这两种类型来处理。当然,在Entity类中时间是。

2022-10-27 09:36:01 125

原创 Apipost 上手指南

Apipost是一个用于Web开发的接口调试工具,由国人开发。目前版本:7.0类似的产品还有,不过个人感觉功能上不如Apipost好用。

2022-10-25 09:50:51 892

原创 从零开始 Spring Boot 23:MyBatis

图源:简书 (jianshu.com)虽然国内大部分使用MyBatis的Spring Boot项目都会使用MyBatisPlus,因此开发人员(包括我)对MyBatis的认识并不深入,甚至于很多功能都不清楚是MyBatisPlus实现的还是MyBatis实现的,所以全面系统地学习MyBatis很有必要。本篇文章从一个空白项目开始,不包含MyBatisPlus,只使用MyBatis,以此学习相关功能。对应的最终示例代码和数据库见learn_spring_boot/ch23 (github.com)。添加依赖

2022-10-23 15:35:38 199

原创 软件推荐:PowerToys

平台:Windows开发商:Microsoft分类:工具类最近因为疫情关系居家办公,需要将正在开发的项目进行内网穿透,提供给前端使用。我用的是笔记本,有时候因为下楼测核酸或者别的原因,电脑自动休眠那边就调用不了接口了,然后又不想修改电源策略,因为那样改来改去的就很麻烦,于是在网上搜了一下,看下有没有什么能临时阻止电脑休眠的小工具,结果就发现了这个。PowerToys 可以看作是微软给WIndows做的一个瑞士军刀,在我看来每台Windows的PC都应该装一个。

2022-10-19 16:23:57 154

原创 从零开始 Spring Boot 21:Activiti

图源:简书 (jianshu.com)Activiti是一个开源的工作流引擎,可以帮助我们实现一些流程自动化,比如OA审批流等。官网:Open Source Business Automation | Activitimvn中最新的依赖版本是6.0.0,可以通过下面的页面查看所有的mvn依赖版本:这里通过标签屏蔽了项目对包中的的传递依赖,这是因为项目本身引用,并依赖相应的,如果这里再通过引入其他版本的就会导致版本冲突,会导致无法正常运行。修改注解需要修改注解,通过属性排除对类的自动化配置。Activ

2022-09-09 15:54:11 181

原创 从零开始 Sping Boot 20:多环境部署

如果你一路从阅读到,那我相信你应当和我一样掌握了基础的Spring Boot开发技能。但是我们还需要补上最后一课——多环境部署。不同的环境需要使用不同的配置信息来运行,比如开发环境数据库一般使用本地数据库,即localhost,而测试环境和生产环境可能有独立部署的数据库服务器,即需要指定具体的ip。所以一般会有数份配置文件来保存不同环境的不同配置信息。下面用实例来说明如何对Spring Boot应用配置多环境。同之前一样,这里会基于一文中的最终示例代码,在这之上进行修改。......

2022-08-29 10:16:26 147

原创 从零开始 Spring Boot 19:Redis

Redis是一种很成熟的缓存技术,也被称作NOSQL。可以利用这类技术来缓存长时间计算的结果,以节约系统资源或者提升响应时间。和以往一样,本篇文章的示例代码将基于中的最终示例代码进行修改,可以从仓库获取对应的完整源码。

2022-08-25 13:35:28 153

原创 从零开始 Spring Boot 18:微信登录

在之前的文章中我介绍了如何给Spring Boot开发的Web应用添加Shiro身份验证模块,这样我们就可以通过用户/密码的方式让用户进行登录。当然了,这种方式就必须要求用户先进行注册,或者管理员为用户预先添加帐号才行,所以如果我们需要降低用户使用系统干的门槛,让用户更容易登录系统,就可以接入第三方登录。而天朝最流行的第三方登录就是微信,这点应该是没有争议的。下面就介绍如何在现有用户/密码登录体系外额外接入微信登录。...

2022-08-15 16:24:54 3712 2

原创 从零开始 Spring Boot 17:MyBatis Plus 续

之前在中介绍了MyBatis Plus的基本用法,这里再介绍一些那篇文章没有介绍的内容。本篇的示例代码将会基于的最终代码修改而来,对应的完整代码见。

2022-08-09 09:30:28 129

原创 从零开始 Spring Boot 16:枚举

在开发Web应用时,无法避免的是会定义一些“离散值”,比如书籍类型,包含艺术、小说、工程书籍等。在数据库中,我们一般会使用整数来表示这些值,比如1代表小说,2代表艺术,3代表工程相关书籍等。但在代码中使用整数来表示类型可读性就很差了,以前一般使用类常量来表示这些值,但更好的做法是使用枚举。关于Java中枚举的基本知识,可以阅读。下面通过在我们的图书应用中引入枚举类型来说明如何在Spring Boot项目中使用枚举,以及相关的注意事项。下面的示例代码都将由中的最终代码修改而来,相关完整代码见。表的。...

2022-08-05 15:32:46 447 9

原创 从零开始 Spring Boot 15:Http Client

在开发Web应用的时候,有时候会涉及到服务器之间的通信,这通常是以借口调用和返回的方式来实现的。在之前的PHP开发中,我常用的是curl来实现服务器之间的接口调用,在Spring Boot开发中,更常见的是使用Http Client。更多的Http Client介绍见。下面实际演示如何在项目中整合和使用Http Client。这里的示例代码将基于最终代码进行修改,对应的代码仓库是。...

2022-08-03 15:44:32 264

原创 从零开始 Spring Boot 14:文件上传

文件上传是Web应用相当常见的功能,本篇文章将展示如何在Spring Boot的项目中添加此功能。假设我们需要在编辑图书时为图书上传一个封面。

2022-08-03 10:22:39 70

原创 Spring Boot 应用一键发布脚本

虽然手输一遍命令也不是特别麻烦,但如果发布频繁,或者要维护多个环境,就很头疼了,难免出现手滑在生产发布时使用。有时候为了确认应用正常启动,还需要再使用。当然上边这种机械重复性工作可以用。不同的环境只要替换脚本中的。在日常工作中,如果要发布。以后再发包只要上传完。...

2022-08-02 15:25:36 84

原创 从零开始 Spring Boot 13:参数校验

我在上篇文章中介绍了如何在SpringBoot构建的Web应用中接收HTTP请求附带的参数。在Web开发中很重要的一点是——不要相信客户端。因为HTTP客户端是位于服务端开发之外的,其安全性是难以掌控的,关于HTTP客户端安全方面最广泛的问题之一就是应当使用Session而非Cookie,因为前者是服务端存储技术,后者是客户端存储技术,而客户端存储的数据更容易被伪造。同样的,客户端发来的请求也应当进行各种形式的安全验证,因为篇幅关系,本文只讨论传入参数的合法性验证。...

2022-07-31 09:37:12 65

原创 从零开始 Spring Boot 12:接收请求

虽然在之前的系列文章中已经在示例中演示了怎么接收请求,但那些示例都过于简单,在实际开发中往往会遇到各种各样接收请求和处理参数的问题,所以有必要这里专门讨论一下。同样的,这里将使用中最终代码作为基础代码,在这之上演示如何接收各种类型的请求和参数。在开始之前需要说明的是,实际上,如果是基于完整实现HTTP1.1的HTTP客户端,比如移动应用或者服务器,可以使用全部的HTTP1.1定义的HTTPMethod并使用Restful风格定义接口,这点在之后会说明。...

2022-07-26 16:34:09 205

原创 从零开始 Spring Boot 11:返回数据

图源:简书 (jianshu.com)在之前文章中,已经展示了如何在前后端分离的Web应用中封装并返回统一格式的返回值,但之前展示的返回值封装的相当简单,只能用于简单示例,今天对返回值进行进一步封装和重构。本篇文章会在从零开始 Spring Boot 9:Shiro - 魔芋红茶’s blog (icexmoon.cn)中最终代码的基础上进行修改。你可以从下面的链接获取对应的示例代码:为了说明之前设计的一些缺陷,这里为这个示例代码添加上Swagger文档支持,具体方法见从零开始 Spring Boot 8:

2022-07-02 22:18:44 515

原创 CentOS 8 部署Nginx

虽然说可以通过直接从自带的仓库傻瓜式安装,但往往需要重新编译以添加诸如SSL等模块,所以从官网下载源码编译安装是更稳妥的做法。可以从官网的nginx: download这个页面下载相应的Nginx版本:我这里为了和公司测试机上版本保持一致,选择了1.20.2,自己用的话还是选择最新的Stable版本即可。使用或者其它工具下载到服务器:解压并进入源码目录:设置安装参数:这里指定的是安装目录,同样的,根据FHS推荐,最好安装在下。是为了将SSL模块编译进去,以便使用OpenSSL证书提供HTTPS支持,

2022-06-18 11:30:09 337

原创 从零开始 Spring Boot 10:日志

从零开始 Spring Boot 10:日志图源:简书 (jianshu.com)虽然可以通过System.out.println之类的方式向控制台直接输出一些信息进行最简单的调试,但这种方式并不正式,且很难将输出信息收集和统一管理分析。正式的方式是使用日志,实际上很多编程语言甚至提供语言层级的日志支持,不过Java并没有相应的支持,需要我们选取一些适用于Spring Boot应用的日志框架。事实上Spring Boot默认提供了对Logback日志框架的支持,但在实际使用中更多的是使用SLF4J

2022-05-07 16:24:00 147

原创 从零开始 Spring Boot 9:Shiro

从零开始 Spring Boot 9:Shiro图源:简书 (jianshu.com)Shiro是一个权限管理组件,可以用它来实现Web应用的权限控制,本篇将介绍如何在Spring Boot的Web项目中使用Shiro实现权限控制。准备工作在使用Shiro前,需要先构建一个示例需要的基本Web应用:从头创建一个新的基于Spring Boot的Web项目,并添加基本的依赖,可以参考从零开始Spring Boot 1:快速构建 - 魔芋红茶’s blog (icexmoon.cn)。创建数据库,

2022-05-06 18:15:28 606

原创 从零开始 Spring Boot 8:Swagger

从零开始 Spring Boot 8:Swagger图源:简书 (jianshu.com)后台开发最常见的是开发Restfull接口,相应的,为了和前端沟通就可能需要定义和维护一套接口文档,编写和维护文档往往需要花费相当的时间和精力。Swagger是一套定义良好的接口文档规范,可以借助相关的API和工具,根据项目代码自动生成接口文档。下面我们就给之前做的示例项目my_first_app用Swapper添加上接口文档的支持。你可以从learn_spring_boot (github.com)获取

2022-05-05 16:48:10 126

原创 从零开始 Spring Boot 7:生成框架代码

从零开始 Spring Boot 7:生成框架代码图源:简书 (jianshu.com)之前在从零开始 Spring Boot 4:Mybatis Plus - 魔芋红茶’s blog (icexmoon.cn)中介绍了如何在Spring Boot项目中使用Mybatis Plus。这需要手动实现很多类似于Mapper的中间类,之际上Mybatis Plus提供根据数据库自动生成相关框架代码的功能。准备工作首先,从Spring Initializr创建并下载一个新的Spring Boot项目。

2022-05-05 16:47:36 186

原创 从零开始 Spring Boot 6:事务

从零开始 Spring Boot 6:事务图源:简书 (jianshu.com)本篇文章的示例代码是在learn_spring_boot (github.com)基础上修改的,你可通过以上链接获取。有时候,在执行SQL时,多条SQL之间具备某种关联性。比如要添加一个用户订单的同时要从商品表中将库存减少,这两个操作必须是“要么都成功,要么都失败”,如果用普通的两条SQL执行,就可能发生商品库存扣减了,订单没有生成,或者订单生成了,商品库存没有扣减。在这种情况下,就需要将这两个SQL当做一个事务进行处

2022-05-05 15:40:26 85

原创 从零开始 Spring Boot 5:SpringApplication

从零开始 Spring Boot 5:SpringApplication图源:简书 (jianshu.com)我们的Spring Boot应用是通过SpringApplication.run启动的,启动后可以看到控制台输出欢迎信息以及一些日志信息,如果失败,也会显示相应的错误信息。SpringApplication的主要工作是加载相关的配置,创建Web应用的上下文,以及启动应用等。下面介绍和SpringApplication相关的Spring Boot特性。本篇文章的演示代码基于learn_sp

2022-05-05 13:03:29 339

原创 Java编程笔记24:并发(4)

Java编程笔记24:并发(4)图源:PHP中文网仿真利用多线程可以编写仿真程序,实际上在Java编程笔记23:并发(3) - 魔芋红茶’s blog (icexmoon.cn)中介绍的“赛马游戏”就是一个仿真程序。这里我们介绍一个更复杂一点的仿真程序。餐厅假设我们有一个餐厅,有顾客、侍者、厨师这几个角色,顾客可以通过侍者来点菜,厨师根据订单来做菜,做好菜后由侍者将菜品送给顾客品尝。package ch24.restaurant;import java.util.ArrayList;i

2022-05-04 16:28:04 425

原创 Java编程笔记23:并发(3)

Java编程笔记23:并发(3)图源:PHP中文网新类库中的构件JavaSE 5 为并发添加了一些新的组件,这里简单介绍。CountDownLatch在编写并发程序时,有时候我们会启动多个线程执行某项工作,而主线程需要等待这些线程完成后在继续执行或者退出。如果是Go或者其它语言,此时就必须使用sync.WaitGroup这样的组件去计数和等待。关于Go的多线程和sync.WaitGroup,可以阅读Go语言编程笔记7:goroutine和通道 - 魔芋红茶’s blog (icexmoon.

2022-05-03 20:50:18 558

原创 Java学习笔记22:并发(2)

Java学习笔记22:并发(2)图源:PHP中文网终止任务终止线程有一种非常简单的方式:设置一个多线程共享的标记位,子线程用轮询的方式检查这个标记位,如果该标记位显示取消状态,就让子线程退出执行。公园入园关于这点,《Thinking in Java》中有一个公园入园的示例:假设有一个公园,存在多个入口可以入园,现在用程序统计每个入口已进入的人数,以及总的已入园人数。这可以看做是一个简单的模拟程序,显然多个入口入园是一个并发的过程,要用多个线程去模拟。而总的入园计数器需要在多个线程之间共享。最

2022-05-02 20:19:54 597

原创 从零开始 Spring Boot 4:Mybatis Plus

从零开始 Spring Boot 4:Mybatis Plus图源:简书 (jianshu.com)虽然上篇文章从零开始 Spring Boot 3:数据库 - 魔芋红茶’s blog (icexmoon.cn)介绍了如何在Spring Boot中连接并使用数据库,但可以看到,默认提供的JdbcTemplate并不是很好用。因此,本篇文章将介绍一个更好用的数据库连接组件MyBatis-Plus,并展示如何用在我们的示例中用MyBatis-Plus取代JdbcTemplate完成相关数据库操作。你

2022-04-30 15:17:14 621

原创 从零开始 Spring Boot 3:数据库

从零开始 Spring Boot 3:数据库图源:简书 (jianshu.com)上篇文章从零开始 Spring Boot 2:处理请求 - 魔芋红茶’s blog (icexmoon.cn)介绍了如何接收和处理HTTP请求,这篇文章将介绍如何连接数据库,并通过数据库来存储和读取数据。准备工作在介绍使用Spring Boot框架使用数据库前,需要先有一个数据库才行,这里推荐使用MySQL。其安装方式是多种多样的,我是通过XAMPP安装的,相关内容可以阅读PHP开发环境(XAMPP+XDebug+V

2022-04-29 17:49:54 559

原创 从零开始 Spring Boot 2:处理请求

从零开始 Spring Boot 2:处理请求图源:简书 (jianshu.com)经过上一篇从零开始Spring Boot 1:快速构建 - 魔芋红茶’s blog (icexmoon.cn)后,我们已经搭建起Spring Boot项目的开发环境,以及一个简单的使用Spring Boot的Web应用。本篇将演示在这个应用基础上,如何实现一个简单的可以进行增删改查(CURD,Create Update Retrieve Delete)的Web应用。实体类在创建Controller之前,我们需要先创

2022-04-29 16:29:33 178 2

原创 从零开始Spring Boot 1:快速构建

从零开始Spring Boot 1:快速构建图源:简书 (jianshu.com)最近因为工作关系,开始学习Spring Boot,作为一个Java开发新手,不可避免地在上手第一个Java框架后遇到各种迷茫和波折,所以在学习的同时开一个新系列,记录一些学习的积累和感悟。Spring Boot是什么简单的说,Spring Boot是脱胎于Spring家族的一个框架,它诞生的原因在于Spring MVC等Spring系列框架虽然商用的可用性已经很强,相关组件和配置都很完善,但配置工作太过繁琐复杂,以至

2022-04-29 13:29:22 244

原创 IDEA生成spring boot项目jar包

IDEA生成spring boot项目jar包刚上手IDEA做sping boot项目,学习过程中遇到一些坑,具体我也不清楚为什么IDEA的默认项生成jar包会产生这些问题,但经过以下折腾后的确可以解决问题,所以先记录。用IDEA打开一个spring boot项目:File>project structure:project settings > Artifacts选项卡中点加号:依次选择JAR > From modules…然后是重点:这里必须像上图这样设置:

2022-04-26 14:11:26 896

原创 XXX不是内部或外部命令,也不是可运行的程序或批处理文件的解决

XXX不是内部或外部命令,也不是可运行的程序或批处理文件的解决通常我们都需要将某些工具添加到环境变量Path,以便在任意工作目录下都能调用。如果设置环境变量的时候出现了问题,就会显示“XXX不是内部或外部命令,也不是可运行的程序或批处理文件”。绝大多数情况是环境变量配置出错,或者是没有重启,环境变量没有刷新导致的。但今天我遇到一个奇怪的问题。在配置Maven的时候,我通过文件夹属性复制了程序的主目录并在环境变量中配置:表面看并没有什么问题,通过编辑文本查看也没有什么问题:但如果运行:非常让

2022-04-25 16:26:58 5300

原创 Java学习笔记21:并发(1)

Java学习笔记21:并发(1)图源:PHP中文网并发是《Thinking in Java》的最后一个章节(其实后边还有一个图形界面,但Java的图形界面组件早就被废弃了)。也是一个相当庞大和难以学习的章节,相关的概念性描述非常多,这里我没办法照搬原文(篇幅不允许),所以更多的是直接展示如何用代码实现,完整的概念性描述可以直接参考原书。基本概念Java将并发抽象成线程和任务,前者对应Thread类,后者对应Runnable或Callable接口。Thread可以通过从Thread类继承并创建实

2022-04-24 17:35:55 521

原创 Java编程笔记20:注解

Java编程笔记20:注解图源:PHP中文网注解(annotation)不同于可有可无的注释(comment),其同样是编程语言的重要组成部分。不同语言的注解其作用和风格也是不同的。对于Python而言,因为它是一种强类型的动态语言,所以早期的Python缺乏在静态编译期的类型检查能力,因此后续PEP-484等PEP主键推出和完善了注解语法,通过注解可以帮助Python实现一部分的静态期类型检查能力。不过Python本质上依然是一种动态语言,注解被设置为非强制性的,也就是说有没有注解都不会影响程序运

2022-04-16 13:52:49 290

原创 Java编程笔记19:枚举

Java编程笔记19:枚举图源:PHP中文网之前在Java编程笔记2:初始化和清理 - 魔芋红茶’s blog (icexmoon.cn)中简单介绍过枚举,在对反射和泛型等内容学习后,我们可以更深入地学习和理解枚举。基本操作下面这个例子说明了一些枚举的基本操作:package ch19.basic;import util.Fmt;enum Color { RED, BLUE, GREEN, YELLO, BLACK}public class Main { publi

2022-04-13 19:44:11 268

mathTest java gui

mathTest java gui

2014-06-13

jquery.qrcode.js

js生成二维码的插件, 结合网上以及自己使用, 稍微修改了下demon,适配不支持画布的浏览器(IE7/8等)

2014-03-19

PHP实用指南

适合新手的入门学习教材,内容全面,包含AJAX,设计模式等等

2014-02-17

空空如也

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

TA关注的人

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