- 博客(215)
- 收藏
- 关注
原创 SpringBoot 学习系列四(SpringMVC中ContextLoaderListener)
Spring MVC 是建立在 IOC 容器基础上的,那么该容器是如何在 Web 环境中被载入并起作用的 ?通常我们需要配置一个监听器(ContextLoaderListener)。所谓ContextLoaderListener,就是在web部署描述符即web.xml里面经常配置的一个监听器,如下<listener> <listener-class>org....
2020-02-24 13:24:59 2031
原创 SpringBoot 学习系列五(springboot中使用Servlet)
前言以前的java web项目,需要在web.xml中定义servlet,对应不同的请求,而在spring项目中,我们用controller定义了各种各样的servlet(当然不包括DispatcherServlet),那么controller是servlet吗?servlet的本质其实也是一个java bean,controller是对servlet的封装,底层依旧是servlet。web...
2019-10-28 15:23:20 813
原创 SpirngBoot 学习系列二(Spring容器和应用上下文)
容器的概念有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助了,就给Spring说,我想要个对象——于是Spring就很贴心的给你个对象。Spring既然要负责应用程序中那么多对象的创建管理,就像苹果要生产那么多的手机(对象)一样,肯定有一个专门搞对象的地方。苹果生产手机的地方叫工厂...
2019-10-28 11:55:25 242
原创 SpringBoot 学习系列一(Servlet、Tomcat、JSP)
1.servlet的工作过程以及容器的作用Web服务器习惯处理静态页面,所以需要一个程序来帮忙处理动态请求(如当前时间)。Web服务器程序会将动态请求转发给帮助程序,帮助程序处理后,返回处理后的静态结果给web服务器程序。这样就避免了web服务器程序处理动态页面。Servlet 的本质是一个帮助程序。 什么是servlet? 早期的web应用主要用于浏览新闻等静态页面,用户通过HTTP协议...
2018-08-13 16:22:42 359
原创 SpringBoot 学习系列三(SpringMVC 实现)
简单的SpringMVC 程序1.创建springmvc.xml创建SpringMVC的核心配置文件,SpringMVC本身就是Spring的子项目,对Spring兼容性很好,不需要做很多配置。这里只配置一个Controller扫描就可以了,让Spring对页面控制层Controller进行管理。&amp;amp;amp;amp;lt;?xml version=&amp;amp;amp;quot;1.0&amp;amp;amp;quot; enco
2018-06-02 18:53:31 219
原创 域名与Ngnix
1.域名在互联网上,所有的地址都是ip地址,现阶段主要是IPv4(比如:110.110.110.110)。但是这些ip地址太难记了,所以就出现了域名(比如http://baidu.com),通过域名解析能够将域名转换为ip地址。2. Nginx域名和Nginx:域名和nginx没有直接的关联;域名直接关联是不同ip主机,通过在主机上进行Nginx配置,从而实现了不同的域名类型通过域名nginx配置可以实现如下类型域名:办公网域名:Nginx配置时限制访问该域名ip必须为办公网 一般用于办公网浏览器
2020-05-09 17:04:32 629
原创 Kakfa 快速入门
kafka是一个分布式消息队列。具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。kafka对外使用topic的概念,生产者往topic里写消息,消费者从读消息。为了做到水平扩展,一个topic实际是由多个partition组成的,遇到瓶颈时,可以通过增加partition的数量来进行横向扩容。单...
2020-05-07 12:39:55 316
原创 Spring Event事件通知机制
1. 背景Spring的事件通知机制是一项很有用的功能,使用事件机制我们可以将相互耦合的代码解耦,从而方便功能的修改与添加。本文我来学习并分析一下Spring中事件的原理。举个例子,假设有一个添加评论的方法,在评论添加成功之后需要进行修改redis缓存、给用户添加积分等等操作。当然可以在添加评论的代码后面假设这些操作,但是这样的代码违反了设计模式的多项原则:单一职责原则、迪米特法则、开闭原则。...
2020-04-30 16:25:23 454
原创 ZooKeeper Curator 事件监听
Curator 事件有两种模式,一种是标准的观察模式,一种是缓存监听模式。标准的监听模式是使用Watcher 监听器。第二种缓存监听模式引入了一种本地缓存视图的Cache机制,来实现对Zookeeper服务端事件监听。Cache事件监听可以理解为一个本地缓存视图与远程Zookeeper视图的对比过程。Cache提供了反复注册的功能。Cache是一种缓存机制,可以借助Cache实现监听。简单来说,...
2020-04-21 09:46:47 544
原创 ES入门之查询
当使用于 过滤情况 时,查询被设置成一个“不评分”或者“过滤”查询。即,这个查询只是简单的问一个问题:“这篇文档是否匹配?”。回答也是非常的简单,yes 或者 no ,二者必居其一。created 时间是否在 2013 与 2014 这个区间?status 字段是否包含 published 这个单词?lat_lon 字段表示的位置是否在指定点的 10km 范围内?当使用于 查询情况 时...
2020-04-21 09:44:44 478
原创 ES 快速入门
什么是 Elasticsearch ?使用 java 语言开发的一套开源的全文搜索引擎用于搜索、日志管理、安全分析、指标分析、业务分析、应用性能监控等多个领域底层基于 Lucene 开源库开发,提供 restAPI,可以被任何语言调用支持分布式部署,可水平扩展更新迭代快、社区活跃、文档丰富Elasticsearch 的基础概念集群(Cluster)Elasticsearch ...
2020-04-08 21:23:25 2672
原创 Java 并发编程基础之线程状态
现在操作系统中进程的定义:具有独立功能的程序在一个数据集合上的一次运行,是系统进行资源分配和调度的独立单位。线程:轻量级进程,是系统调度的最小单元,拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。Java程序是天生的多线程程序,通过JMX(thredMXBean)查看一个普通的java程序包含哪些线程。使用多线程的优势:1)更多的处理器核心2)更快的响应速度3)多线程...
2020-04-07 15:31:07 155
原创 类不能定义自身类的对象 C++和java的区别
在C++的类定义中,是不能够在类中定义自身类的对象的,但是可以定义自身类的指针对象和引用。class A{ public: A () { cout<<"Constructor method."<<endl; }; A aa;}; void main(){ A aaaaa;}以上代码编译提示错误,a’ : use...
2020-03-31 15:45:15 329
原创 Mybatis(四)实践须知
Mybatis 不同类型sql 语句执行结果:Select:查询结果为空时,如果是基本类型返回值为默认的初始化值 ;类对象返回值为null;Map、List 等集合类对象返回值为new 空对象。Update/Delete:影响结果为空时,返回值为0;影响结果不为空时,返回值为影响条数。Mybatis xml文件中ResultMap 与 ResultType区别ResultTy...
2020-03-02 11:16:04 294
原创 ApplicationContextAware使用理解
问题背景在我们的web程序中,用spring来管理各个实例(bean), 有时在程序中为了使用已被实例化的bean, 通常会用到这样的代码:ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext-common.xml"); AbcService abcService = (...
2020-03-01 17:04:21 236
原创 MAC使用RZ SZ指令实现本地与远程服务器之间文件上传与下载
一、rz sz概念我们知道用linux命令rz/sz可以通过一些终端软件如secureCRT等在linux服务器与本地windows之间传文件。在服务器上rz一下,在本地windows下就跳出一个窗口,选择文件后就传到了服务器上;而在服务器上用sz命令sz一个文件,在本地电脑硬盘上就有了这个文件。用起来是很方便,但是总感觉很神奇。 关于其可能的工作原理,之前猜测过,感觉是这样:用secureCR...
2020-02-06 15:59:34 1628 1
原创 生成树代码
树结构在业务开发中时常遇到,本文将详细实现一个树结果的生成。1、 定义数据结构本文首先定义主题结构,每个主题自己的主题信息、负责人、孩子节点等public class SubjectDto implements Comparable { /** * 自增id */ protected Long id; /** * 创建时间 * */ protected Lon...
2020-01-08 21:39:20 1186
原创 响应结果处理器
使用 @ControllerAdvice & ResponseBodyAdvice 可以拦截Controller方法默认返回参数,统一处理返回值/响应体如:如果需要对所有ResponseDto返回类型的响应值中加入处理耗时、链路追踪reqId,可以进行如下编码@ControllerAdvicepublic class ResponseBodyHandler implements Re...
2019-12-15 14:19:39 200
原创 请求日志拦截器
1.背景spring记录日志有两种,一种是通过AOP,另一种是通过拦截器interceptor;SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的。在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式:第一种方式是要定义的Interceptor类要实现了Spring 的HandlerInterceptor ...
2019-12-04 16:39:13 366
原创 AOP 实现分布式锁
在web项目开发过程中,经常会遇到分布式资源控制的场景,通过加锁从而保证资源访问的互斥性。本文主要介绍在没有redis情况下通过mysql进行分布式锁的实现。场景:线程A与线程B执行前需要判断资源R的状态,当R的状态为1时,则可以执行,当R的状态为0时,则不容许执行,且同一时刻只容许一个线程执行。线程执行时资源R状态置0,线程执行结束后R状态重新置1.上述场景中,若不对资源R进行互斥访问,则...
2019-12-03 15:26:19 799
原创 请求日志AOP实现
面向切面编程往往让我们的开发更加低耦合,也大大减少了代码量,同时呢让我们更专注于业务模块的开发,把那些与业务无关的东西提取出去,便于后期的维护和迭代。接下来将以日志功能为例介绍切面的应用:1.添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp...
2019-10-25 18:01:12 192
转载 tomcat、Apache HTTP Server
题主说的Apache,指的应该是Apache软件基金会下的一个项目——Apache HTTP Server Projec...
2019-10-25 16:50:45 314
转载 @SpringBootApplication的使用
之前用户使用的是3个注解注解他们的main类。分别是@Configuration,@EnableAutoConfiguration,@ComponentScan。由于这些注解一般都是一起使用,spring ...
2019-10-25 16:37:10 129
转载 SpringBoot 文件上传下载
最近在学习SpringBoot,以下是最近学习整理的实现文件上传下载的java代码: 1、开发环境: IDEA15+ Maven+JDK1.8 2、新建一个maven工程...
2019-10-25 16:24:19 147
原创 java 基础知识点(二)
1.强制类型转换时的规则有哪些1.当对小于 int 的数据类型(byte,char,short)进行运算时,首先会把这些 类型的变量值强制转为 int 类型,对 int 类型的值进行运算,最后得到的值也是 int 类型的。因此,如果把 2 个 short 类型的值相加,最后得到的结果是 int 类型, 如果需要得到 short 类型的结果,就必须显示地运算结果转为 short 类型。例子: s...
2019-10-25 15:32:25 202
原创 java 注解
注解分类一、运行机制划分:源码注解编译时注解 (只在编译器时起作用)运行时注解(运行阶段起作用,影响运行逻辑,例如@Autowired)二、按照来源划分:jdk自带注解@Override@Depreted@SuppressWarning(“deprecation”)自定义注解java第三方注解Spring注解SpringBoot注解自定义注解一、 实现使用@...
2019-10-23 16:18:27 369
原创 web开发需要知道的知识(四)四大对象域
Java web 四大作用域和九大对象四个作用域1.request域request是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。应用场景 : 常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。2.session域服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet...
2019-10-18 19:22:57 230
原创 Web 开发需要知道的知识(三)线程安全检测
1. 概述在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址、请求的url、header中的属性(如cookie、授权信息)、body中的数据等。由于在Spring MVC中,处理请求的Controller、Service等对象都是单例的,因此获取request对象时最需要注意的问题,便是request对象是否是线程安全的:当有大量并发...
2019-10-18 14:25:20 159
原创 Web 开发需要知道的知识(二)
Session 与 Cookie先有鸡还是先有蛋呢?在这里其实是先有Session 的。当程序需要为某个客户端的请求创建一个回话的时候, 服务器首先检查这个客户端的请求里是否已包含了一个回话标识 -JSESSIONID, 如果已包含一个 JSESSIONID服务器就按照 JSESSIONID 判断是否以前已经为此客户端创建过回话。如果客户端请求不包含JSESSIONID, 则为此客户端创建...
2019-09-04 21:00:36 144
原创 Web 开发需要知道的知识(一)
Request 报文格式请求行,请求头,空行,请求正文HTTP的参数HTTP使用GET/POST等方法不影响参数存放的位置,本文首先来介绍有几种放HTTP参数的方式。1.URL里放参数在URL里放参数最简单,就是问号+键值对,它存在于HTTP的Header中第一行POST /psas/bug/image/confirm?param1=1¶m2=b HTTP/1.1...
2019-08-30 20:34:36 403
原创 ThreadLocal
ThreadLocal 的原理ThreadLocal 表面相 当 于 一 个 容 器 , 用 于 存 放 每 个 线 程 的 局 部 变 量 (实际由当前线程中的map对象进行存储)。ThreadLocal 实例通常来说都是 private static 类型的。ThreadLocal 可以给一个初始值, 而每个线程都会获得这个初始化值的一个副本, 这样才能保证不同的线程都有一份拷贝。所以Thr...
2019-08-26 16:53:35 119
原创 泛型编程
1. 概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类...
2019-08-13 17:50:46 165
原创 对象上转型与接口回调
1.上转型对象若B是A的子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到类A声明的对象中时,那么就称对象a是子类对象b的上转型对象.上转型对象不能操作子类声明定义的成员变量(失掉了这部分属性),不能使用子类声明定义的方法(失掉了一些功能)和新增的属性。(通过动态绑定实现)上转型对象可以代替子类对象去调用子类重写的实例方法。如果子类重写的方法是实例方法,那么上转型对象调用重...
2019-08-03 15:52:47 918
原创 对象深拷贝与浅拷贝
背景知识:Java中的数据类型分为基本数据类型和引用数据类型。对于这两种数据类型,在进行赋值操作、用作方法参数或返回值时,会有值传递和引用(地址)传递的差别。Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。对象拷贝主要分为:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)。1.定义浅拷贝(Shallow...
2019-08-03 15:30:01 164
原创 枚举类 ENUM
1.使用场景和属性有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便enum和class、interface的地位一样,可以实现一个或则多个接口使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器使用enum定义、非抽象的枚举类默认使用final修饰,...
2019-08-02 22:52:40 239
原创 thymeleaf 传递模型变量给js函数作为参数
最近做Springboot的项目,在使用Thymeleaf模板时使用了th:onclick属性来调用JavaScript方法,其中涉及到ajax传入UUID到后台异步更新数据的功能。有以下几种写法:1.涉及到转义符’<button class=“btn” th:οnclick="‘audit(’ ’ + ${items.id} + ’ ’ );’">通过审核 通过2.不需要转义符...
2019-07-31 11:56:54 2112
原创 final 关键字
final 可以用来修饰类,变量和方法。1.当一个类被 final 修饰的时候,表示该类不能被继承。类中方法默认被final 修饰。2.当 final 修饰基本数据类型的变量时,表示该值在被初始化后不能更改;当 final 修饰引用类型的变量时,表示该引用在初始化之后不能再指向 其他的对象。注意:final 修饰的变量必须被初始化。可以在定义的时候初始化,也可以在构造函数中进行初始化。...
2019-07-28 11:05:31 108
原创 service层设置interface
在JAVA web开发中,项目的service层可以设置interface,也可以不需要interface只有实现类。我们知道mapper层实现接口是问了通过反射实现代理对象。这让我产生了一个疑问,为什么service层需要定义interface,有什么好处和坏处。仔细追究之后,发现这个问题很有意思。1.有个接口,注入的时候可以注入到Service对象,没有你就要注入到ServiceImp对象。...
2019-07-27 17:40:51 1778
转载 Web服务器、Servlet服务器之间的关系
在本文中,我写了一些关于Web服务器、Servlet容器以及它与JVM的关系的基本概念。我想表达的是,Servlet容器也仅仅不过是一个Java程序。什么是Web服务器?想要知道什么是Servlet容器,我们首先要知道什么是Web服务器。Web服务器使用HTTP协议来传输数据。最简单的一种情况是,用户在浏览器(客户端,client)中输入一个URL(如,www.programcreek....
2019-07-27 14:45:40 705
原创 深入浅出NIO之Selector实现原理
Java NIO 由以下几个核心部分组成: 1、Buffer 2、Channel 3、Selector之前进行socket编程时,accept方法会一直阻塞,直到有客户端请求的到来,并返回socket进行相应的处理。整个过程是流水线的,处理完一个请求,才能去获取并处理后面的请求,当然也可以把获取socket和处理socket的过程分开,一个线程负责accept,一个线程池负责处理请求。...
2018-08-27 12:55:53 390 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人