- 博客(127)
- 资源 (1)
- 收藏
- 关注
原创 Elasticsearch(一):入门篇
文章目录一、Docker安装ES和Kibana二、基本概念文档_index(索引)_type(类型)_id(ID)三、保存或修改文档数据(POST/PUT)四、检索文档(GET)1.检索一个文档2.检索多个文档(mget)五、删除文档&索引(DELETE)六、批量操作的API(bulk)七、查询表达式(Query DSL)1.查询表达式的语法结构2.查询所有(match_all)3.模糊匹配(match)4.短语匹配(match_phrase)5.多字段匹配(multi_match)6.布尔查询(b
2021-12-19 17:00:02 1914
原创 CaffeineCache基本使用 & SpringBoot集成缓存
文章目录一、常用API二、缓存回收(清除):1. 显式回收2. 隐式回收2.1 基于容量2.2 基于时间2.3 基于引用2.4 基于权重三、刷新缓存(reload)四、监听器五、外部存储本地缓存相比Redis缓存以及其他存储避免了网络IO的开销,而且基于内存的读写效率很高,所以在需要的时候合理使用本地缓存可以有效提高系统的吞吐量。CaffeineCache是非常优秀的开源本地缓存框架。本篇不分析其原理,只关注其简单用法。<dependency> <groupId>co
2021-11-28 18:58:16 5532
原创 HttpClient & RestTemplate
一、Http请求与响应格式请求格式:请求行(包含请求方法(Get、Post等)、URI、Http版本)请求头请求体响应格式:状态行(包含HTTP版本、状态码、描述信息)响应头响应体二、HttpClient1.基本组件HttpClient是apache提供的用于传输HTTP消息的工具包。HttpClient中一些常用的组件:HttpClientBuilder:用于创建Http客户端实例。CloseableHttpClient:表示用于发送请求和接收响应的Http客户端
2021-11-24 18:06:05 1854
原创 Java中的加解密
一、Base64编码Base64,它是一种编码方式,算不上一种加密算法。它就是使用64个可打印字符来表示二进制数据的方法。Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的,此时可以将子节序列用Base64编码。Java提供了Base64的编解码器,直接使用即可。public class Base64Test { public static final Base64.Encode
2021-11-23 20:53:21 957
原创 Java读写Excel
一、Excel基本概念Workbook:工作簿,代表一个Excel文件。Excel分为两种,后缀名为xls的HSSFWorkBook(2003版本及以前),和后缀名为xlsx的XSSFWorkBook(2007版本及以后)Sheet:表格,一个Workbook中可以有多个表格。Row:行(通过Sheet可以获取到某一行)Col:列(通过Row可以获取到某个单元格)Cell:单元格(单元格中存放数据)apache提供了poi可供我们操作Excel文件,需要引入依赖如下:<depende
2021-11-23 10:59:18 5238
原创 docker【一】
Docker是一个开源的容器引擎,它有助于更快的交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当做程序一样进行管理。使用Docker可更快地打包、测试以及部署应用程序,并可以缩短从编码到部署运行代码的周期MacOS下载docker地址:https://docs.docker.com/desktop/mac/install/一、Docker三要素镜像(image):镜像就相当于一个只读的模板。镜像可以用来创建docker容器,一个镜像可以创建很多容器。镜像与容器的关系类似与.
2021-11-21 12:04:30 614
原创 Java8 函数式编程
函数式编程:这里“函数”应该理解为数学上的函数,即y=f(x)。函数式编程的理解出发点,比如给Swing中Button添加监听器addListener(Listener接口)为例,没有lambda表达式时一般都是通过匿名内部类new XXXListener()做,由于Java一切皆对象,所以我们传递了一个监听器对象。但是这块语义层面,传递对象并不是最终目的,我们的最终目的就是想传递一个“行为”(比如用户点击Button后的行为),所以采用Lambda表达式这种简洁写法只是在语义层面能够更好一些,本质还.
2021-09-20 18:03:46 2502
原创 Redis【三】持久化&管道&事务&消息队列
一、线程IO模型Redis是单线程程序,由于它的所有数据都在内存中,所有的运算都是内存级别的运算,所以能非常快速的处理数据。正因为它是单线程程序,所以对于一些复杂度为O(n)的
2021-06-19 14:53:46 1176
原创 Redis【二】实战应用
一、分布式锁Java提供了在多线程下保证线程安全的锁机制,但是在多服务节点的情况下的分布式应用进行逻辑处理时也经常会遇到并发问题,这个时候就需要用到分布式锁。
2021-06-19 14:52:51 608
原创 Redis【一】基础数据结构&Jedis
Redis有5种基础数据结构,分别为:string(字符串)、list(列表)、hash(字典)、set(集合)和zset(有序集合)。一、string(字符串)
2021-06-19 14:51:29 204
原创 Spring MVC【九】拦截器与过滤器
Spring MVC中定义了对请求处理拦截的接口HandlerInterceptor,它是通过DispatcherServlet调用处理器执行链(HandlerExecutionChain)实现对请求方法调用的拦截与处理。Filter是Java Servlet的接口,实现该接口可以对Servlet请求和响应进行拦截与处理。Spring继承该接口,提供了很多常用的Filter实现类。一、Spring MVC拦截器HandlerInterceptor接口如下:public interface Ha
2021-06-11 21:40:34 872
原创 Spring MVC【八】文件上传
一、前言Web前端文件上传的典型方式是使用enctype属性值为multipart/form-data的表单(<form>)进行传送,在表单中添加type值为file的输入框,提交表单以二进制方式将文件传送到后端。在后端,Java Web使用HttpServlet处理HTTP请求,从request中获取文件流并进行处理。Java中使用较早并且使用较为广泛的处理文件上传的库是Apache提供的Commons FileUpload库,在Servlet3.0之后,Java官方提供了标准的文件上传处
2021-06-11 21:40:11 483
原创 Spring MVC【七】静态资源放行&父子容器&REST
一、静态资源的放行中央控制器DispatcherServlet配置在应用的入口配置中(一般配置在web.xml)在Servlet3.0之后,可以实现WebApplicationInitializer接口替代。DispatcherServlet中需要配置拦截的请求匹配,出啊同配置可拦截*.do和*.action后缀的请求,结合参数可以实现多层级的匹配,比如在控制器类中配置.do的请求映射,在方法中通过参数进行第二层匹配。如下:@Controller@RequestMapping("user.do"
2021-06-11 21:39:47 728
原创 Spring MVC【六】异常处理&请求转发与重定向
目录前言一、Controller类层级异常处理:@ExceptionHandler二、全局的异常处理1.@ControllerAdvice2.XML配置异常处理3.自定义全局异常处理器前言在Web项目中,未处理的异常返回到前端的错误信息是状态码500的内部服务器错误。如下请求映射方法中的处理就会给前端返回一个500的错误:@RequestMapping("errorHandler")@ResponseBodypublic void errorTest() {
2021-06-11 21:39:19 776
原创 Spring MVC【五】数据验证
一、JavaBean标准效验Java官方只是提供了验证的标准接口(javax.validation),并没有提供具体的实现。Apache提供了Bval用来实现标准接口规范。使用JavaBean Validation的标准验证接口需要导入javax.validation依赖包及Bval实现的依赖包,使用Maven导入依赖配置如下:<dependency> <groupId>javax.validation</groupId> <artifac
2021-06-11 21:36:31 528
原创 Git&GitHub
一、前言版本控制是一种记录文传内容变化,以便将来查阅特定版本修订情况的系统。版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
2021-06-10 20:36:42 235
原创 Spring MVC【四】数据绑定&JSON格式注解
Bean Wrapper(Bean封装器)和DataBinder(数据绑定器)是Spring中的两种数据绑定的实现。两者都实现了PropertyEditorRegister和TypeConverter接口,可以实现数据的类型转换。DataBinder还可以用来效验数据有效性,在SpringMVC容器中,使用WebDataBinder将前端请求参数转换为后端类型的对象,如果要处理JSON等类型的请求和响应,则需要结合HTTP消息转换器及@RequestBody和@ResponseBody注解。一、Bean
2021-06-10 00:05:39 2029 1
原创 Spring MVC【三】数据类型转换
一、类型转换JDK在界面Bean开发技术中提供了PropertyEditor接口,实现该接口的类可以达成字符串类型和特定类型的转换。Spring核心框架提供了基本类型的属性编辑器实现。另外,Spring还提供了转换器(Converter)和转换服务(ConversionService)用来实现任意对象类型之间的转换。Converter和PropertyEditor的功能相似,ConversionService则是不同类型转换器的容器,包含不同类型的转换器。1.属性编辑器:PropertyEditor
2021-06-10 00:05:05 781
原创 Spring MVC【二】基于注解和代码的配置
一、Spring MVC注解配置在Spring基础框架中,使用<context:annotation-config />或<context:component-scan />开启组件注册或依赖自动装载等注解功能。在SpringMVC项目中,<context:component-scan />还会开启@RequestMapping、@GetMapping等映射注解功能(也就是会注册RequestMappingHandlerMapping和RequestMappingHa
2021-06-10 00:04:20 579
原创 Spring MVC【一】基础概述
一、HTML与HTTPHTML(超文本标记语言)是一种标记语言,使用<html>、<head>、<body>等标签开发网页。该类型文档使用.html为后缀名,使用浏览器打开后可以直接查看页面效果。基于B/S模式的开发和访问中浏览器和服务器的通信需要遵循一定的规则,这个规则就是HTTP协议。HTTP协议是位于应用层的协议,其底层是基于TCP通信。在此协议下,浏览器端发出一个遵循协议的请求,服务器返回浏览器可以识别的响应。在浏览器端,通过URL(统一资源标识符)来建立连接
2021-06-10 00:03:37 194
原创 安全网络通信(SSL&JSSE)
在网络上,信息由源主机发送到目标主机的传输过程中会经过一些其他计算机。当信息进行传播的时候,可以利用工具,将网络接口设置在监听的模式,便可将网络中正在传播的信息截获或者捕获到,从而进行攻击...
2021-06-01 13:21:25 2446 2
原创 Spring【八】AOP
目录一、AOP基本介绍1.应用场景2.基本术语解释二、Java AOP框架---AspectJ1.Eclipse IDE中安装AJDT的步骤:2.使用Eclipse AJDT 开发AspectJ实例3.AspectJ 切入点执行表达式4.AspectJ注解开发三、Spring AOP1.Spring AOP框架的主要接口和类2.ProxyFactoryBean的使用2.1.基于接口的代理2.2.基于类的代理2.3.使用拦截器替代增强3.增强器(Ad
2021-05-30 16:04:04 481
原创 Spring【七】MyBatis整合Spring
Spring提供了与Hibernate、JPA的集成类,没有提供与MyBatis的集成类,但MyBatis提供了与Spring的无缝集成库MyBatis-Spring,官方网站为
2021-05-30 16:03:10 738
原创 Spring【六】数据访问与事务处理
一、Spring JDBC模板类(JdbcTemplate)JDBC的Connection接口查询和操作数据的步骤包括:打开连接,进行SQL预编译,执行SQL语句,获取结果集、解析结果集、释放资源和关闭连接。Spring使用JDBC模板类(JdbcTemplate)简化了数据操作,应用程序只需要提供SQL语句和对结果进行解析就可以了,其他模板化的代码(例如获取关闭连接、资源释放以及异常处理)由模板类自动处理。JDBC除了定义Connection接口,还定义了数据源接口DataSource。数据源比数
2021-05-30 16:02:19 641
原创 客户端协议处理框架
java.net包下提供了一套客户端协议的处理框架,它是在传输层之上,提供了通过的应用层协议处理框架,比如基于这个框架可以实现处理HTTP协议客户端(ye'jiu'sh)
2021-05-30 15:29:09 338 1
原创 Spring【五】基于注解和代码的配置
使用XML文件配置是Spring最早的配置方式,大中型项目依据功能或不同的命名空间拆分成多个配置文件,每个配置文件的配置内容都可能很多,导致配置文件的维护工作量大,也容易出错。从Spring2.5开始,在以XML文件作为主要配置的同时,可以将某些配置以注解的形式在代码中直接配置,极大地减少了配置地繁琐度,提高了配置地效率,Java开发人员也更容易熟悉和适应。从Spring3.0开始可以完全脱离XML文件,使用Java代码地方式进行容器和框架地配置。一、Java注解注解(Annotation)是J.
2021-05-28 15:40:38 675
原创 Spring【三】容器与Bean扩展点
一、容器与Bean的扩展点Spring提供了容器层级和类层级的扩展,在Bean被初始化或销毁等不同生命周期进行功能的扩展。在容器层级,Spring提供接口BeanFactoryPostProcessor和BeanPostProcessor,用于容器实例化每个Bean的前后进行功能的扩展; 在类层级,可以通过配置init-method和destory-method(或使用相应的注解)等方式来进行回调,实现Bean在初始化和销毁时的功能扩展。1.全局与容器生命周期回调Bean在容器中的基本生命周
2021-05-28 15:38:56 550
原创 Spring【二】IoC容器
IoC容器是Spring最核心的概念和内容。他替代了传统的new方式初始化对象,通过读取在配置中的Bean定义,自动创建并管理容器的Bean实例及其生命周期;最重要的是可以在Bean的定义中进行依赖对象的配置,并根据依赖配置自动注入相关依赖,降低对象之间的耦合程度,以达到解耦的效果。Spring提供了多种依赖注入的方式,包括构造函数注入和设置值注入等。一、组件、框架、容器组件、框架和容器是所有开发语言都适用的概念。组件时为了提高代码的重用而对代码进行隔离和封装;框架在提供一系列组件的基础上,定义了更
2021-05-26 20:27:52 1256 1
原创 Spring【一】Spring简述
一、Spring的概念及理念Spring是为了解决企业应用开发的复杂性而诞生,它在对Java EE框架的思考和改善之上,实现了对EJB重量级容器的替换。Spring是一个轻量级的依赖注入(DI)和面向切面编程(AOP)的容器框架,极大地降低了企业应用系统开发的耦合性,提高了灵活性。Spring框架开发的原则和理念如下:Spring的目标是提供一个一站式轻量级的应用开发平台,抽象应用开发遇到的共性问题。其提供了各个层级的支持,包括Web MVC框架、数据持久层、事务处理和消息中间件等。 Spring
2021-05-26 20:26:11 684 2
原创 【MyBatis 六】类型处理器&对象工厂&数据库提供商配置&插件
一、类型处理器我们先来看一段JDBC的程序,下面是一个通过用户名获取User对象的方法。首先进行sql语句的预编译,然后利用PrepareStatement对象填充了占位符(setString方法) 执行sql语句得到结果集ResultSet对象,利用该对象获取Java类型的变量值,并将变量值封装进User对象中返回。public static User getUserByName(String name) { Connection conn = null; Resul
2021-02-21 20:59:08 307
原创 【MyBatis 五】动态SQL & 缓存
动态SQL在学习JDBC的时候做过在代码中拼接sql,这种在代码中直接写会造成代码比较混乱,不便于维护。MyBatis中的动态sql是一个亮点,它就是用于帮助我们动态的去拼接构建sql语句的。一、if标签和where标签1.语法<!--当test中判断条件成立的时候,则标签体内的sql会被拼接上--><if test = "判断条件">需要拼接的sql</if>2.示例<select id = "getUserByParams" par
2021-02-15 15:28:52 641
原创 【Maven】基础概念总结
一、为什么需要Maven如果没有maven,那么我们在开发中可能会遇到下列几个问题:一个项目就是一个工程:如果项目非常庞大,就不适合继续使用package来划分模块。最好是每一个模块对应一个工程,利于分工协作。借助于Maven就可以将一个项目拆分成多个工程。 手动导入jar包:比如做JavaWeb工程的时候,我们可能需要将项目中要用的jar包“复制”、“粘贴”到WEB-INF/lib目录下。带来的问题是∶同样的jar包文件重复出现在不同的项目工程中,一方面浪费存储空间,另外也让工程比较臃肿。 借助
2021-02-05 20:48:14 1226
原创 文件上传与下载
一、文件上传进行文件上传时需要做如下前提准备:网页表单的请求方式必须为POST请求,并且form项的enctype属性要设置为multipart/form-data(表示以二进制方式提交请求信息) 使用file的表单域:<input type="file" name="file"/>(注意name属性必须设置,不然浏览器不会发送上传的数据)当表单请求的编码方式变成以二进制的方式传输信息时,通过String request.getParameter方法是获取不到请求信息的。我们需要通过
2021-01-31 14:09:03 503 1
原创 过滤器&监听器
一、过滤器1.Filter过滤器简介Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器。Filter 过滤器是 JavaEE 的规范,也就是接口。Filter过滤器主要是用于拦截请求,过滤响应的。结合过滤器可以进行权限检查、编码控制、事务管理等操作。2.自定义Filter实现Filter接口首先自定义过滤器需要实现javax.servlet.Filter接口。实现其中doFilter方法.
2021-01-28 16:47:50 1736
原创 【读书笔记】改善Java程序的151个建议
1.三元操作符的类型必须一致三元操作符是if-else的简化写法,它被使用的比较频繁。在Java中三元操作符中非常需要注意的问题就是类型转换,隐式的拆装箱问题。对于类型转换,规则如下:若两个操作数不可转换,则不做转换,返回值为Object类型。 若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。 若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若
2021-01-25 20:36:28 983
原创 JSTL核心标签库
目录一、JSTL简介二、JSTL核心标签库使用准备三、核心标签库一、JSTL简介JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标签库。EL 表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个 jsp 页面变得更佳简洁。JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自
2021-01-04 17:12:52 377
原创 JSP中的EL表达式
目录一、EL表达式简介二、EL表达式获取数据1.EL 表达式搜索域数据的顺序2.EL表达式获取JavaBean的数据2.1 JavaBean规范2.2 获取JavaBean中不同类型的数据三、EL的11个隐含对象1.pageContext的使用2.获取四个特定域中的属性3.其他隐含对象的使用四、EL中的运算符1.关系运算2.逻辑运算3.算数运算4.empty运算5.三元运算符6."."点运算和[]中括号运算符一、EL表达式简介EL
2021-01-03 21:00:32 9385 3
原创 JSP基础知识
JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中要动态产生的内容采用Java代码来编写。而对固定不变的静态内容采用普通静态HTML页面方式编写。一、JSP运行原理JSP本质上是一个Servlet,即与Servlet中相关的方法都可以在JSP中调用。工作原理如下图:如下为一个jsp文件转换为.java文件后的程序。<%@ page language="java" contentType="text/html; charset
2021-01-03 14:14:35 495 3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人