跳过正文

Java

3、ES的使用
·3156 字·7 分钟· loading · loading
Java 组件与中间件 ElasticSearch
在ES7.0之后,types_name只可以写_doc 方式一:RestFul访问 # 在浏览器或PostMan中进行访问,注意选择请求的methods
3、Axis2
·983 字·2 分钟· loading · loading
Java JavaEE WebService
整合SpringBoot+Axis2 # 1、添加依赖 # <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>top.ygang</groupId> <artifactId>axisdemo</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-parent</artifactId> <version>2.2.0.RELEASE</version> </parent> <packaging>jar</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <axis2.version>1.7.8</axis2.version> </properties> <dependencies> <!-- spring-boot-web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- axis2 --> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-spring</artifactId> <version>${axis2.version}</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-transport-http</artifactId> <version>${axis2.version}</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-transport-local</artifactId> <version>${axis2.version}</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-xmlbeans</artifactId> <version>${axis2.version}</version> </dependency> </dependencies> </project> 2、在resources下创建目录以及文件 # ServicePath/services/testService/META-INF/services.xml,其中只有目录testService的目录可变,其余目录都是固定
2、装饰者模式
·283 字·1 分钟· loading · loading
Java 设计模式 结构式模式
原理 # 装饰者模式(DecoratorPattern)是指在不改变原对象的基础之上,将功能附加到对象上,提供了比继承更灵活性的替代方案(扩展原有对象的功能),装饰者模式属于结构型模式
2、认证,加密,授权,缓存
·1602 字·4 分钟· loading · loading
Java JavaEE Shiro
认证 # 1、Controller登录方法 # @RequestMapping("/login.do") public String login(User user,ModelMap map){ //获得一个主体对象 Subject subject = SecurityUtils.getSubject(); //将请求得到的用户名和密码放入一个令牌中 UsernamePasswordToken token = new UsernamePasswordToken(user.getUaccount(),user.getUpsw()); //调用主体对象的认证方法login,对令牌进行认证 try{ //触发Realm中doGetAuthenticationInfo() subject.login(token); Session session = subject.getSession(); User nwoLogin = (User)subject.getPrincipal(); session.setAttribute("nowLogin", nwoLogin); }catch(UnknownAccountException accountException){ map.put("ex", "账号不存在"); return "tologin.do"; }catch(IncorrectCredentialsException passwordExeption){ map.put("ex", "密码校验错误"); return "tologin.do"; } return "redirect:toMain.do"; } 2、Realm类中,doGetAuthenticationInfo方法进行登录认证 # //身份认证方法,需要在用户登录系统时触发 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException { //通过方法形参arg0,获取封装了用户账号密码的令牌 UsernamePasswordToken token = (UsernamePasswordToken)arg0; //验证账号是否存在 String uaccount = token.getUsername(); User user = userService.selectByUaccount(uaccount); if(user == null){ //如果用户名不存在,返回null //则shiro底层返回了一个异常(UnknownAccountException) return null; } //验证密码是否正确 //第一个参数为,数据库查出的user对象,第二个参数为正确的密码,第三个参数为当前realm名 //如果密码不正确,该构造器会抛出异常(IncorrectCredentialsException) return new SimpleAuthenticationInfo(user,user.getUpsw(),getName()); } 加密 # 1、ShiroConfig类中,设置加密 # //设置加密类型(身份匹配器),以及方式 @Bean public HashedCredentialsMatcher credentialsMatcher() { HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher(); // 说密码的加密方式为MD5 (不可逆的加密方式,只能加密,不能解密) credentialsMatcher.setHashAlgorithmName("MD5"); // 针对MD5加密的信息,再加密1024次 credentialsMatcher.setHashIterations(1024); return credentialsMatcher; } //配置shiro框架中,用来完成身份认证,授权的域对象 @Bean public LoginAndAuthRealm loginAndAuthRealm() { LoginAndAuthRealm realm = new LoginAndAuthRealm(); // 给Realm中配置身份对比规则 realm.setCredentialsMatcher(credentialsMatcher()); return realm; } 2、修改Realm组件身份认证方法 # //身份认证方法,需要在用户登录系统时触发 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException { //通过方法形参arg0,获取封装了用户账号密码的令牌 UsernamePasswordToken token = (UsernamePasswordToken)arg0; //验证账号是否存在 String uaccount = token.getUsername(); User user = userService.selectByUaccount(uaccount); if(user == null){ //如果用户名不存在,返回null //则shiro底层返回了一个异常(UnknownAccountException) return null; } //验证密码是否正确 //获取当前用户名,创建盐值对象 ByteSource byteSource = ByteSource.Util.bytes(user.getUaccount()); //第一个参数为,数据库查出的user对象,第二个参数为正确的密码,第三个参数为盐值对象,第四个参数为当前Realm名称 //如果密码不正确,该构造器会抛出异常(IncorrectCredentialsException) return new SimpleAuthenticationInfo(user,user.getUpsw(),byteSource,getName()); } 3、控制层注册方法中,对密码进行MD5加密 # String pwd = new SimpleHash("MD5", 密码,盐值‘一般为用户名’, 加密次数‘1024’).toString();
2、类加载器子系统
·525 字·2 分钟· loading · loading
Java JVM 内存与垃圾回收
类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在开头有特定的文件标识
2、定时器
·10604 字·22 分钟· loading · loading
Java 常用API 第三方
Java实现定时器的方式 # 1、Timer:这是Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行,一般使用比较少
2、SpringCloud
·2519 字·6 分钟· loading · loading
Java SpringFramework SpringCloud
SpringCloud的概念 # Spring Cloud框架是Spring框架中专门用来针对微服务开发的框架,它的原生是NetFlix公司开发的一套微服务框架,但是后来被Spring收购了 Spring Cloud框架产品中,提供了很多微服务服务组件,如: Eureka注册中心,Zuul网关组件 ,Configuration配置中心 , Feign服务间通信 , Hystrix服务降级,Bus消息总线等 SpringCloud已经闭源了,SpringCloud的版本均为英国伦敦的地铁站站名,最早 的 Release 版本 Angel,第二个 Release 版本 Brixton(英国地名),然后是 Camden、 Dalston、Edgware、Finchley、Greenwich、Hoxton。 SpringCloud的组件 #
2、Scene
·59 字·1 分钟· loading · loading
Java JavaFX 常用组件
搭建在窗口上的场景,各种组件、控件都必须放在场景上,Scene上必须有个根节点
2、Redis常用命令
·1689 字·4 分钟· loading · loading
Java 组件与中间件 Redis
通用命令 # 连接数据库 redis-cli 使用默认IP地址和端口连接Redis数据库(IP地址:127.0.0.1,端口号6379) redis-cli -h 192.168.2.144 -p 6379 使用指定IP地址和端口连接Redis数据库 持久化 save 将数据同步保存到磁盘(存储在dump.rdb文件中) bgsave 将数据异步保存到磁盘 lastsave 返回上次成功将数据保存到磁盘的Unix时戳 shundown 将数据同步保存到磁盘,然后关闭服务 远程服务控制 info 提供服务器的信息和统计 monitor 实时转储收到的请求 slaveof 改变复制策略设置 config 在运行时配置Redis服务器 对value操作的命令 exists(key) 确认一个key是否存在 del(key) 删除一个key type(key) 返回值的类型 keys(pattern) 返回满足给定pattern的所有key randomkey 随机返回key空间的一个 keyrename(oldname, newname) 重命名key dbsize 返回当前数据库中key的数目 expire 设定一个key的活动时间(s) ttl 获得一个key的活动时间 select(index) 按索引查询(切换到指定的数据库),默认索引为0 move(key, dbindex) 移动当前数据库中的key到dbindex数据库 flushdb 删除当前选择数据库中的所有key flushall 删除所有数据库中的所有key 对String操作的命令 # set(key, value) 给数据库中名称为key的string赋予值value get(key) 返回数据库中名称为key的string的value getset(key, value) 给名称为key的string赋予上一次的value mget(key1, key2,…, key N) 返回库中多个string的value setnx(key, value) 添加string,名称为key,值为value setex(key, time, value) 向库中添加string,设定过期时间time mset(key N, value N) 批量设置多个string的值 msetnx(key N, value N) 如果所有名称为key i的string都不存在 incr(key) 名称为key的string增1操作 incrby(key, integer) 名称为key的string增加integer decr(key) 名称为key的string减1操作 decrby(key, integer) 名称为key的string减少integer append(key, value) 名称为key的string的值附加value substr(key, start, end) 返回名称为key的string的value的子串 对List操作的命令 # rpush(key, value) 在名称为key的list尾添加一个值为value的元素 lpush(key, value) 在名称为key的list头添加一个值为value的元素 llen(key) 返回名称为key的list的长度 lrange(key, start, end) 返回名称为key的list中start至end之间的元素 ltrim(key, start, end) 截取名称为key的list lindex(key, index) 返回名称为key的list中index位置的元素 lset(key, index, value) 给名称为key的list中index位置的元素赋值 lrem(key, count, value) 删除count个key的list中值为value的元素 lpop(key) 返回并删除名称为key的list中的首元素 rpop(key) 返回并删除名称为key的list中的尾元素 blpop(key1, key2,… key N, timeout) lpop命令的block版本 brpop(key1, key2,… key N, timeout) rpop的block版本 rpoplpush(srckey, dstkey) 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部 对Set操作的命令 # sadd(key, member) 向名称为key的set中添加元素member srem(key, member) 删除名称为key的set中的元素member spop(key) 随机返回并删除名称为key的set中一个元素 smove(srckey, dstkey, member) 移到集合元素 scard(key) 返回名称为key的set的基数 sismember(key, member) member是否是名称为key的set的元素 sinter(key1, key2,…key N) 求交集 sinterstore(dstkey, (keys)) 求交集并将交集保存到dstkey的集合 sunion(key1, (keys)) 求并集 sunionstore(dstkey, (keys)) 求并集并将并集保存到dstkey的集合 sdiff(key1, (keys)) 求差集 sdiffstore(dstkey, (keys)) 求差集并将差集保存到dstkey的集合 smembers(key) 返回名称为key的set的所有元素 srandmember(key) 随机返回名称为key的set的一个元素 对Hash操作的命令 # hset(key, field, value) 向名称为key的hash中添加元素field hget(key, field) 返回名称为key的hash中field对应的value hmget(key, (fields)) 返回名称为key的hash中field i对应的value hmset(key, (fields)) 向名称为key的hash中添加元素field hincrby(key, field, integer) 将名称为key的hash中field的value增加integer hexists(key, field) 名称为key的hash中是否存在键为field的域 hdel(key, field) 删除名称为key的hash中键为field的域 hlen(key) 返回名称为key的hash中元素个数 hkeys(key) 返回名称为key的hash中所有键 hvals(key) 返回名称为key的hash中所有键对应的value hgetall(key) 返回名称为key的hash中所有的键(field)及其对应的value
2、Platform、Task
·685 字·2 分钟· loading · loading
Java JavaFX 基本概念
javafx.application.Platform # 作为JavaFx的工具类