11 2020 档案
摘要:Form 标签简介 在使用 SpringMVC 的时候我们可以使用 Spring 封装的一系列表单标签,这些标签都可以访问到 Model 中的内容。 Form 标签的作用 第一是它会自动的绑定来自 Model 中的一个属性值到当前 form 表单对应的实体对象,第二是它支持我们在提交表单的时候使用除
阅读全文
摘要:为什么后端要做表单的校验呢,如果只使用前端来校验的话,如果浏览器把 JS 给禁用掉, 就完犊子啦 JSR JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE6.0 中 JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等
阅读全文
摘要:ES6 模块化 在 ES6 出现之前,JS 不像其他语言拥有 “模块化” 这一概念,于是为了支持 JS 模块化,我们使用类、立即执行的函数或者第三方插件(RequireJS、seaJS)来实现模块化,但是在 ES6 出现之后, 上述的解决方案都已经被废弃, 因为 ES6 中正式引入了模块化的概念 E
阅读全文
摘要:Loader 的特点 单一原则, 一个 loader 只做一件事情, 多个 loader 会按照从 右 至 左, 从 下 至 上 的顺序来一一执行的 例如: 从右至左 ['style-loader', 'css-loader'] 如上的含义是先执行 css-loader 解析 css 文件之间的关系
阅读全文
摘要:和图片一样webpack默认不能处理CSS文件, 所以也需要借助loader将CSS文件转换为webpack能够处理的文件类型 使用 CssLoader 安装 CssLoader npm install --save-dev css-loader 安装 StyleLoader npm install
阅读全文
摘要:url-loader 功能类似于 file-loader,但是在文件大小(单位 byte)低于指定的限制时,可以返回一个 DataURL 使用 UrlLoader urlloader 官方详细地址:https://www.webpackjs.com/loaders/url-loader/ 安装 Ur
阅读全文
摘要:需要注意的点 默认情况下 fileloader 打包之后生成的图片名称,就是文件内容的 MD5 哈希值来作为文件的名称,如果要想打包之后不修改图片的名称,保持图片原来的名称, 那么可以新增 fileloader 的其他的一些配置那就是例如:name: "[name].[ext]" 关于 filelo
阅读全文
摘要:新建 index.html 内容如下所示 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <form action="./info.html" method
阅读全文
摘要:在没有安装好 fileloader 之前你直接打包图片相关的资源的时候会报错我这里不在演示 什么是 loader webapck的本质是一个模块打包工具, 所以webpack默认只能处理JS文件, 不能处理其他文件, 因为其他文件中没有模块的概念, 但是在企业开发中我们除了需要对JS进行打包以外,
阅读全文
摘要:webpack打包后的文件会自动添加很多代码, 在开发过程中非常不利于我们去调试, 因为如果运行webpack打包后的代码,错误提示的内容也是打包后文件的内容, 所以为了降低调试的难度, 提高错误代码的阅读性, 我们就需要知道打包后的代码和打包之前的代码的映射关系,只要有了这个映射关系我们就能很好的
阅读全文
摘要:配置文件的名称必须叫做: webpack.config.js, 否则直接输入 npx webpack 打包会出错,如下图我把 webpack 的文件名字改为了 bntang.js 且运行了 npx webpack 效果如下图所示 如果要使用其它名称, 那么在输入打包命令时候必须通过 --config
阅读全文
摘要:我们在打包JS文件的时候需要输入: npx webpack index.js, 这句指令的含义是: 利用 webpack 将 index.js 和它依赖的模块打包到一个文件中, 其实在 webpack 指令中除了可以通过命令行的方式告诉 webpack 需要打包哪个文件以外, 还可以通过配置文件的方
阅读全文
摘要:webpack 简介 webpack 是一套基于 NodeJS 的 模块打包工具, 在 webpack 刚推出的时候就是一个单纯的 JS 模块打包工具, 可以将多个模块的JS文件合并打包到一个JS文件中, 但是随着时间的推移、众多开发者的追捧和众多开发者的贡献, 现在webpack不仅仅能够打包JS
阅读全文
摘要:服务端区分用户发送的是GET请求和POST请求 通过 HTTP 模块的 http.IncomingMessage 类的 .method 属性即可区别 具体源码如下所示 let http = require("http"); // 1.创建一个服务器实例对象 let server = http.cre
阅读全文
摘要:拿到 POST 请求传递过来的参数 使用querystring模块 语法示例如下 querystring.parse(str[, sep[, eq[, options]]]) querystring.stringify(obj[, sep[, eq[, options]]]) querystring
阅读全文
摘要:拿到 GET 请求传递过来的参数 使用URL模块, 语法示例如下 url.format(urlObject) url.parse(urlString[, parseQueryString[, slashesDenoteHost]]) url.format(urlObject): 将路径转换为对象 u
阅读全文
摘要:Kibana 是一个基于 Node.js 的 ElasticSearch 索引库数据统计工具,可以利用 ElasticSearch 的聚合功能,生成各种图表,如柱形图,线状图,饼图等, 而且还提供了操作 ElasticSearch 索引数据的控制台,并且提供了一定的 API 提示,非常有利于我们学习
阅读全文
摘要:let http = require("http"); let ss = require("./StaticServer.js"); // 1.创建一个服务器实例对象 let server = http.createServer(); // 2.注册请求监听 server.on("request",
阅读全文
摘要:在给浏览器返回数据的时候, 如果没有指定响应头的信息, 如果没有设置返回数据的类型, 那么浏览器不一定能正确的解析, 所以无论返回什么类型的静态资源都需要添加对应的响应头信息 注意点: 加载其它的资源不能写 utf8 如果服务器在响应数据的时候没有指定响应头, 那么在有的浏览器上, 响应的数据有可能
阅读全文
摘要:拿到用户请求路径之后, 只需要利用 fs 模块将对应的网页返回即可 let http = require("http"); let path = require("path"); let fs = require("fs"); // 1.创建一个服务器实例对象 let server = http.c
阅读全文
摘要:路径分发也称之为 路由, 就是根据不同的请求路径返回不同的数据 根据不同的请求路径返回不同的数据 通过请求监听方法中的 request 对象, 我们可以获取到当前请求的路径, 通过判断请求路径的地址就可以实现不同的请求路径返回不同的数据 request对象其实是 http.IncomingMessa
阅读全文
摘要:通过 Nodejs 提供的 http 模块,我们可以快速的构建一个 web服务器, 也就是快速实现过去 PHP服务器的功能(接收浏览器请求、响应浏览器请求等) 通过HTTP模块实现服务器 主要步骤如下 导入HTTP模块 创建服务器实例对象 绑定请求事件 监听指定端口请求 let http = req
阅读全文
摘要:生成之后的结构如下 projectName | images | css | js | index.html 紧接着贴出源码 let fs = require("fs"); let path = require("path"); class CreateProject { constructor(r
阅读全文
摘要:创建目录 语法示例如下 fs.mkdir(path[, mode], callback) fs.mkdirSync(path[, mode]) let fs = require("fs"); let path = require("path"); let str = path.join(__dirn
阅读全文
摘要:前面讲解的都是关于文件的写入和读取操作都是一次性将数据读入内存或者一次性写入到文件中的,但是如果数据比较大, 直接将所有数据都读到内存中会导致计算机内存爆炸, 卡顿, 死机等情况,所以对于比较大的文件我们需要分批读取和写入 语法示例如下 fs.createReadStream(path[, opti
阅读全文
摘要:追加写入 语法示例如下,一个异步,一个同步操作 fs.appendFile(path, data[, options], callback) fs.appendFileSync(path, data[, options]) let fs = require("fs"); let path = req
阅读全文
摘要:文件写入 语法示例如下 fs.writeFile(file, data[, options], callback) fs.writeFileSync(file, data[, options]) let fs = require("fs"); let path = require("path");
阅读全文
摘要:文件读取 语法如下 fs.readFile(path[, options], callback) fs.readFileSync(path[, options]) 注意点, 没有指定第二个参数, 默认会将读取到的数据放到 Buffer 中, 第二个参数指定为 utf8, 返回的数据就是字符串 let
阅读全文
摘要:文件模块 封装了各种文件相关的操作 查看文件状态 语法示例如下 fs.stat(path[, options], callback) fs.statSync(path[, options]) 如下示例是一个异步的 let fs = require("fs"); console.log("1"); f
阅读全文
摘要:路径模块 封装了各种路径相关的操作,和 Buffer 一样, NodeJS 中的路径也是一个特殊的模块,不同的是 Buffer 模块已经添加到Global 上了, 所以不需要手动导入,而 Path 模块没有添加到 Global 上, 所以使用时需要手动导入 获取路径的最后一部分 语法示例如下 pat
阅读全文
摘要:检查是否支持某种编码格式 方法示例如下: Buffer.isEncoding(encoding) let res = Buffer.isEncoding("gbk"); console.log(res); 检查是否是 Buffer 类型对象 方法示例如下: Buffer.isBuffer(obj)
阅读全文
摘要:将二进制数据转换成字符串 返回的是: <string> 转换之后的字符串数据,使用 buf.toString(); let buf = Buffer.from([97, 98, 99]); console.log(buf); console.log(buf.toString()); 往 Buffer
阅读全文
摘要:ElasticSearch 简介 ElaticSearch 简称为 es, 是一个开源的可扩展的全文检索引擎 服务器,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。es 使用 Java 开发并使用 Lucene 作为其核心来实现索引和搜索的功能,但是
阅读全文
摘要:Lucene Lucene 是一个免费开源用于全文检索的程序工具包(API)由 Apache 软件基金会支持和提供。目前主流的 Java 搜索框架都是依赖与 Lucene的,Lucene 官网:http://lucene.apache.org 搜索介绍
阅读全文
摘要:延迟消息 当消息发送到服务器时,该消息不能直接被放在队列里面,而是在 MQ 服务器里面建立一个定时任务,在服务器到达延时时间后再执行投递的操作 延迟消息的使用场景 淘宝七天自动确认收货。在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统, 通知支付系统将款打给商家,这个过程持续七天,就是
阅读全文
摘要:重复消费概述 当消息回退到队列里面后,会被再次消费,但是我们不能让消息消费成功2次其实, MQ 自己就可以保证消息不被重复消费,因为 MQ 可以把消息投递给消费者时,是阻塞的,不会把一个消息投递给多个消费者!但是面试时,有人问你,消息怎么保证不被重复消费!无论在 RabbitMQ, 或者 Activ
阅读全文
摘要:准备知识 计算机只能识别 0 和 1 (因为计算机只认识通电和断电两种状态) 所有存储在计算机上的数据都是以 0 和 1 组成的(数据越大0和1就会越多) 计算机中的度量单位 1 B(Byte字节) = 8 bit(位) 00000000 就是一个字节 111111111 也是一个字节 101010
阅读全文
摘要:jQuery 与 JavaScript 加载模式对比 多个 window.onload 只会执行一次, 后面的会覆盖前面的 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery-入口函数</title
阅读全文
摘要:概念:注解就是说明程序的一个标识,给计算机看的 注释:用文字描述程序,给程序员看的 定义:也叫作元数据,是一种代码级别的说明。它是 JDK1.5 引入的一个新特性,是一种特殊的接口。它可以声明在类、字段、方法、变量、参数、包等前面,作为一个描述去使用 作用分类: 编写文档:通过代码中标识的注解生成文
阅读全文
摘要:什么是 YARN Yarn 是由 Facebook、Google、Exponent 和 Tilde 联合推出的一个新的 JS 包管理工具,Yarn 是为了弥补 npm5.0 之前的一些缺陷而出现的。 注意点 在 npm5.0 之前,yarn 的优势特别明显但是现在 NPM 已经更新到了 6.9.x
阅读全文
摘要:什么是 NRM 由于 npm 默认会去国外下载资源, 所以对于国内的开发者来说下载会比较慢,所以就有人写了一个 nrm 的工具, 允许你将资源下载地址从国外切换到国内。 安装 NRM npm install -g nrm 查看是否安装成功 nrm --version 查看允许切换的资源下载地址 nr
阅读全文
摘要:Linux没有图形化界面,我们只能通过控制台去操作Linux系统,我们就要使用类似DOS命令的Linux命令去操作Linux系统。 安装 Linux 参考地址:https://www.cnblogs.com/TangXiaoHuiHui/articles/12205126.html 切换目录 Lin
阅读全文
摘要:@EnableAutoConfiguration会开启SpringBoot的自动配置,并且根据你引入的依赖来生效对应的默认配置 问题 这些默认配置是在哪里定义的? 为何引入相关依赖就会触发自动配置,如下图所示
阅读全文
摘要:使用 SpringBoot 之后,让一个整合了 SpringMVC 的 WEB 工程开发变得非常简单,那些繁杂的配置都消失不见了,这是如何做到的? 查看 main 方法的启动类 注解:@SpringBootApplication,run 方法:SpringApplication.run() @Spr
阅读全文
摘要:NPM 安装的方式 全局安装 一般用于安装全局使用的工具, 存储在全局的 node_modules 中,查看全局安装的路径指令如下, 下方就是全局安装的路径: npm config list 全局安装方式如下: npm install -g 包名 (默认安装最新版本) 卸载全局指定包方式如下: np
阅读全文
摘要:<mvc:annotation-driven/> 是一种简写的形式,加上了这个内容就会自动注册三个 Bean RequestMappingHandlerMapping RequestMappingHandlerAdapter ExceptionHandlerExceptionResolver 如果加
阅读全文
摘要:当我们发送一个请求时, 如果没有找到对应的 mapping,则会到配置文件当中进行匹配 mvc:view-controller index.jsp MyFirstController /** * @author: BNTang */ @Controller public class MyFirstC
阅读全文
摘要:单独放到一个类当中 把 jdbc.properties 名称改为 application.properties 内容还是和之前的内容一样的 jdbc.driverClassName=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:33
阅读全文
摘要:什么是包 前面说过在编写代码的时候尽量遵守单一原则, 也就是一个函数尽量只做一件事情, 例如: 读取数据函数和写入数据函数和生成随机数函数等等, 不要一个函数既读取数据又写入数据又生成随机数, 这样的代码非常容易出错, 也非常难以维护。在模块化开发中也一样, 在一个模块(一个文件中)尽量只完成一个特
阅读全文
摘要:require 导入模块时可以不添加导入模块的类型 a.js let name = "BNTang"; exports.str = name; b.js let aModule = require("./09"); console.log(aModule); 如上我是没有指定文件模块的类型的,当前目
阅读全文
摘要:exports 只能通过 exports.xxx 方式导出数据, 不能直接赋值 以下的方式是通过 exports.xxx 方式导出数据的 a.js let name = "BNTang"; exports.str = name; b.js let aModule = require("./08-a.
阅读全文
摘要:三种导出方式 在 NodeJS 中想要导出模块中的变量或者函数有三种方式 通过exports.xxx = xxx 导出 a.js let name = "it6666.top"; function sum(a, b) { return a + b; } exports.str = name; exp
阅读全文
摘要:ModelMap ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,request对象的setAttribute方法的作用:用来在一个请求过程中传递处理的数据。使用方法与model一样 Model Model 和 Model
阅读全文
摘要:用来接收浏览发送过来的 Cookie 值 /** * @author: BNTang */ @Controller public class MyFirstController { @RequestMapping("testHeader") public String show(@CookieVal
阅读全文
摘要:在方法中接收请求头当中的信息 <%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %> <html> <head> <title>@RequestMapping相关属性</title> <
阅读全文
摘要:如上图,我框出了一个变量你先记着这个变量,我们继续往下看 如下图我框出来的这个集合就是它内部允许的方法,只有在它允许的方法之间才可以进行访问 下图的解释就是如果是 POST 请求,在看看有没有异常如果条件成立了,在统一转换为大写,在调用上图的那个集合判断一下是否在我允许的方法之间,如果是在进行了一次
阅读全文
摘要:REST 风格 资源定位及资源操作的一种风格,不是协议,可以遵循,也可以不遵循 REST 风格请求 REST 即 Representational State Transfer(资源)表现层状态转化,用 URL 定位资源,用 HTTP 描述操作,是目前最流行的一种互联网软件架构,它的结构清晰、符合标
阅读全文
摘要:value 属性 用来设置请求路径,值是一个字符串数组,可以设置多个路径共同访问对应方法。 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>@RequestMapping相关
阅读全文
摘要:更新文档 MongoDB中有三个常用的更新方法 save() / update() / findAndmodify() save 方法 save用于往集合里添加一个新文档或者覆盖一个文档,当没有指定文档 _id 的时候就是新增,当指定了集合中已经存在的 _id 的时候就是覆盖原有文档,添加测试数据。
阅读全文
摘要:通过 ES6 的 class 定义组件 定义一个类,然后继承 React.Component,在这个类中实现 render 方法,在 render 方法中返回组件的结构即可,如下所示。 class Home extends React.Component { render() { return (
阅读全文
摘要:ini 文件当中配置散列 相关配置内容如下所示: [main] # 定义凭证匹配器 credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher # 散列算法 credentialsMatcher.hash
阅读全文
摘要:概述 散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如 MD5、SHA 等。 使用 Shiro 进行散列密码 Md5Hash @Test public void encryption() { Md5Hash md5Hash = new Md5Has
阅读全文
摘要:创建一个类继承 AuthorizingRealm,然后覆盖 doGetAuthenticationInfo 方法,在此方法当中去从数据库中获取用户信息,交给验证器去验证用户的信息是否合法,如下图所示: /** * @author BNTang */ public class MyRealm exte
阅读全文
摘要:消息的签收机制说明 消息消费成功后,我们在客户端签收后,消息就从MQ服务器里面删除了若消息没有消费成功,我们让他回到MQ里面,让别人再次重试消费。 自动签收 消息只要被客户端接收到,无论你客户端发生了什么,我们服务器都不管你了,直接把消息删除了,这是它是默认的行为。 手动签收 创建项目 spring
阅读全文
摘要:概述 刚才我们发送消息,不管成功还是失败,都不报错,结果看效果时,发现有的没有发进去,那么如何知道消息是否发送成功呢,RabbitMQ提供了一个消费监视的功能。注意:RabbitMQ发送消息分为2个阶段,消息发送到交互机里面,可以监视,消息由交互机到队列里面,也可以监视。 创建项目 需要的依赖如下:
阅读全文
摘要:生产者 配置生产者 /** * @author BNTang */ @Configuration public class RoutingTopicConfig { /** * 声明交换机 * * @return 交换机 */ @Bean public TopicExchange topicExch
阅读全文
摘要:生产者 配置生产者 /** * @author BNTang */ @Configuration public class RoutingDirectConfig { /** * 声明交换机 * * @return 交换机 */ @Bean public DirectExchange directE
阅读全文
摘要:在React中如何定义组件 在React中创建组件有两种方式,第一种: 通过ES6之前的构造函数的方式来定义(无状态组件),第二种: 通过ES6开始的class来定义(有状态组件)。 通过 ES5 的构造函数来定义组件 在构造函数中返回组件的结构即可,如下所示: function Home() {
阅读全文
摘要:生产者 配置生产者 /** * @author BNTang */ @Configuration public class FanoutConfig { /** * 声明交换机 * * @return 交换机 */ @Bean public FanoutExchange fanoutExchange
阅读全文
摘要:生产者 配置生产者 /** * @author BNTang */ @Configuration public class WorkConfig { @Bean public Queue work() { return new Queue("work"); } } 发送消息 @Test public
阅读全文
摘要:生产者 生产者配置类 ProducerConfig /** * @author BNTang */ @Configuration public class ProducerConfig { @Bean public Queue queue() { // 这里面可以和之前的Hello项目一样,进行5个
阅读全文
摘要:概述 在实际开发中,我们都是使用SpringBoot的技术栈来完成与RabbitMQ的开发这个测试案例中,我们使用两个项目,一个生产者的项目,一个消费者的项目,下面紧接着我们来开始准备这两个项目。 创建生产者 创建项目rabbitmq-springboot-producer 设置一下相关配置,把自动
阅读全文
摘要:下载 Mybatis 核心包 http://www.mybatis.org/mybatis-3/getting-started.html https://github.com/mybatis/mybatis-3/releases https://files.cnblogs.com/files/BNT
阅读全文
摘要:MyBatis 的作用 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 来用于配置和原始映射,将接口和 Java 的 POJO 类映射成数据库中的记录,
阅读全文
摘要:除了顺序流外,Java 8中也可以对集合对象调用parallelStream方法或者对顺序流调用parallel方法来生成并行流。并行流就是一个把内容分成多个数据块,并用不同的线程分别处理每个数据块的流。这样在使用流处理数据规模较大的集合对象时可以充分的利用多核CPU来提高处理效率。不过在一些情况下
阅读全文
摘要:通过createElement创建元素存在的问题,如果结构比较简单还好,但是如果结构比较复杂,就比较难以下手,所以大牛们就发明了JSX,专门用来编写React中的页面结构体的。 什么是 JSX JSX JavaScript + X (XML) (eXtension),JSX是一个看起来很像 XML
阅读全文
摘要:SpringData-Redis概述 SpringData-Redis是Spring大家族的一部分,提供了在Srping应用中通过简单的配置访问Redis服务,对Reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装。RedisTemplate提供了Redis各种操作、异
阅读全文
摘要:使用Jedis操作Redis需要导入的jar包如下所示: jedis 常用 API API名称 作用 new Jedis(host, port) 创建jedis对象,参数host是Redis服务器地址,参数port是Redis服务端口 set(key, value) 设置字符串类型的数据 get(k
阅读全文
摘要:render 方法的注意点 多次渲染, 后渲染的会覆盖先渲染的内容,render方法一次只能渲染一个元素或者组件,render方法最多只能接收3个参数,所以不能同时渲染多个元素 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"
阅读全文
摘要:使用React的几种方式 自行配置 官方文档 通过脚手架自动配置 官方文档 react.js 和 react-dom.js react.js包含了React和React-Native所共同拥有的核心代码, 主要用于生成虚拟DOM react-dom.js包含了针对不同平台渲染不同内容的核心代码, 主
阅读全文
摘要:什么是虚拟DOM 虚拟 DOM 是相对于浏览器所渲染出来的真实的 DOM 虚拟 DOM 就是使用JS对象来表示页面上真实的 DOM 例如下所示: <div id="name" title= "name"> // 真实的DOM let obj = { // 虚拟DOM tagName: 'div',
阅读全文
摘要:需求: 监听按钮的点击, 修改div中的内容 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable
阅读全文
摘要:概述 Topic 类型的Exchange与Direct相比,都是可以根据 RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符!这种模式Routingkey 一般都是由一个或多个单词组成,多个单词之间以 ”.” 分割
阅读全文
摘要:在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的 消息被不同的队列给消费。这时就要用到 Direct 类型的Exchange。 在Direct模型下: 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由 key) 消息的发送方在
阅读全文