首页
统计
邻居
留言
关于
Search
1
彩虹商城系统开发API文档
4,275 阅读
2
IntelliJ IDEA 报错TextMate bundle load error: Bundle kotlin can't be registered
3,719 阅读
3
使用RaiDrive将网盘映射为本地磁盘
2,141 阅读
4
谷歌浏览器 Google Chrome 69.0.3497.100 正式稳定版、测试版及开发版本大全
2,096 阅读
5
抖音、小红书、快手 免费三网解析去水印小工具
2,011 阅读
精选推荐
源码分享
软件下载
影视资源
经验教程
模板插件
Emlogo
Wordpress
浮夸小生。
情感杂文
趣味生活
影视后期
Java学习笔记
登录
Search
标签搜索
个人分享
Wordpress
浮夸小生。
Wordpress教程
Java
PHP
Wordpress优化
Java笔记
网络技巧
网站
CDN
Windows
又拍云
教程
浏览器
IntelliJ IDEA
html
建站教程
微信
情感杂文
浮夸小生。
累计撰写
83
篇文章
累计收到
219
条评论
首页
栏目
精选推荐
源码分享
软件下载
影视资源
经验教程
模板插件
Emlogo
Wordpress
浮夸小生。
情感杂文
趣味生活
影视后期
Java学习笔记
页面
统计
邻居
留言
关于
搜索到
9
篇与
Java笔记
的结果
2024-04-26
微信JS-SDK 签名方式-java代码小记
签名加密方式阅读官方文档: JS-SDK使用权限签名算法 首先获取 access_token -> AppID(开发者ID) + AppSecret(开发者密码) 获取方式:公众号后台地址-基本配置 其次获取 jsapi_ticket —>携带 access_token 请求链接 (见官方文档)生成加密方式最终需要返回如下信息:wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,直接UUID 随机串 signature: '',// 必填,签名 jsApiList: [] // 必填,需要使用的JS接口列表 }); 加密算法不在赘述,详情查看 官方文档 {message type="info" content="注意 : access_token 与 jsapi_ticket 有效其为 7200秒(2小时) 微信官方强烈要求做全局缓存"/}附java实现代码:@Slf4j public class WeChatUtil { private static final String APP_ID = "开发者ID"; private static final String APP_SECRET = "开发者密钥"; private static final long EXPIRATION_TIME_MILLIS = 7200 * 1000; // 7200秒转换为毫秒 private static String accessToken; private static String jsapiTicket; private static Date accessTokenLastUpdateTime; private static Date jsapiTicketLastUpdateTime; private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); // 使用线程安全的ConcurrentHashMap来存储accessToken和jsapiTicket,避免多线程并发问题 private static final ConcurrentHashMap<String, String> cache = new ConcurrentHashMap<>(); // 获取微信配置信息 public static WxConfig getWxConfig(String url) { String accessToken = getAccessToken(); String jsapiTicket = getJsapiTicket(accessToken); if (StringUtils.isNotBlank(accessToken) && StringUtils.isNotBlank(jsapiTicket)) { //进行加密 String nonceStr = UUID.randomUUID().toString(); Long timestamp = System.currentTimeMillis() / 1000; Map<String, Object> paramMap = new TreeMap<>(); paramMap.put("noncestr", nonceStr); paramMap.put("jsapi_ticket", jsapiTicket); paramMap.put("timestamp", timestamp); paramMap.put("url", url); // 拼接参数为字符串 StringBuilder sb = new StringBuilder(); for (Map.Entry<String, Object> entry : paramMap.entrySet()) { sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } String string1 = sb.substring(0, sb.length() - 1); // 去掉最后一个&符号 // 使用SHA1加密 String signature = SHA1(string1); List<String> jsApiList = new ArrayList<>(); jsApiList.add("jsApiList"); return new WxConfig(true, APP_ID, timestamp, nonceStr, signature, jsApiList); } return null; } // 获取 access_token private static String getAccessToken() { log.info("获取acctoken"); // 检查是否过期 if (accessToken == null || accessTokenLastUpdateTime == null || new Date().getTime() - accessTokenLastUpdateTime.getTime() > EXPIRATION_TIME_MILLIS) { // 过期或者第一次获取,需要更新 accessToken updateAccessToken(); } return accessToken; } // 更新 access_token private static void updateAccessToken() { String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + APP_ID + "&secret=" + APP_SECRET; String result = HttpClientManager.httpGetMethod(url, null); JSONObject jsonObject = JSONObject.parseObject(result); if (!jsonObject.containsKey("errcode")) { accessToken = jsonObject.getString("access_token"); accessTokenLastUpdateTime = new Date(); log.info(accessToken); // 使用 scheduler 定时在7200秒后再次更新 accessToken scheduler.schedule(WeChatUtil::updateAccessToken, EXPIRATION_TIME_MILLIS, TimeUnit.MILLISECONDS); } } // 获取 jsapi_ticket private static String getJsapiTicket(String accessToken) { // 检查是否过期 if (jsapiTicket == null || jsapiTicketLastUpdateTime == null || new Date().getTime() - jsapiTicketLastUpdateTime.getTime() > EXPIRATION_TIME_MILLIS) { // 过期或者第一次获取,需要更新 jsapiTicket updateJsapiTicket(accessToken); } return jsapiTicket; } // 更新 jsapi_ticket private static void updateJsapiTicket(String accessToken) { String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi"; String result = HttpClientManager.httpGetMethod(url, null); JSONObject jsonObject = JSONObject.parseObject(result); if (jsonObject.getInteger("errcode") == 0) { jsapiTicket = jsonObject.getString("ticket"); jsapiTicketLastUpdateTime = new Date(); // 使用 scheduler 定时在7200秒后再次更新 jsapiTicket scheduler.schedule(() -> updateJsapiTicket(accessToken), EXPIRATION_TIME_MILLIS, TimeUnit.MILLISECONDS); } } // SHA1 加密 private static String SHA1(String str) { try { MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(str.getBytes("UTF-8")); byte[] digest = crypt.digest(); // 转换为十六进制字符串 Formatter formatter = new Formatter(); for (byte b : digest) { formatter.format("%02x", b); } String result = formatter.toString(); formatter.close(); return result; } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { throw new RuntimeException(e); } } }
2024年04月26日
83 阅读
0 评论
0 点赞
2023-03-24
一篇文章带你入门Java字面量和常量
一篇文章带你入门Java字面量和常量目录引言概念字面量字面量的分类常量总结引言概念字面量: 又叫直接量或者数据,表示直接给出的一个值(可以是整数、小数、ture、false等等。常量: 是指在Java程序中固定不变的数据(字面量)。我们可以理解为是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变。字面量♀ 小AD:哥什么是字面量,光看定义不是很明白呢?♂ 明世隐:这还不明白吗?比如你今天去坐地铁,花了5块钱,这个5就是字面量。♀ 小AD:那我明天去更远的地方要8块钱呢?♂ 明世隐:那8就是字面量。♀ 小AD:还是不是很清楚,你还是举游戏的例子吧。♂ 明世隐:你这货,就举你最喜欢的,你杀一个敌方英雄多少金币。♀ 小AD:200啊♂ 明世隐:那200就是字面量。♀ 小AD:那我第2次杀他,就更少钱了可能180,我要是连续杀几次,他可能只值20块了。♂ 明世隐:那180、20就是字面量。♀ 小AD:好像有点明白了。♂ 明世隐:说到底就是指数据。♀ 小AD:哦♂ 明世隐:数据也分好几种类型字面量的分类字面量类型说明举例字符串字面量用双引号(")括起来的内容“小鲁班”,“明世隐”字符字面量用单引号(')括起来的内容‘男',‘女'整数字面量不带小数点的数字200 , 150小数字面量带小数点的数字3.14 , 66.66布尔字面量布尔值表示真假true,false空字面量一个特殊的值,空值null字符串字面量public static void main(String[] args) { System.out.println("小鲁班"); System.out.println("你个**,你特么*****"); }♀ 小AD:明哥我知道这个♂ 明世隐:说说看。♀ 小AD:这个好简单,第一个是我喜欢的小鲁班,第2个是我喷打野常用台词。♂ 明世隐:喷人你倒是记得清楚。这种用双引号包括的内容表示的,就是字符串字面量,也各类语言中常用的包括Java。♀ 小AD:嗯这个比较好理解。♂ 明世隐:记住双引号是英文的哦♀ 小AD:知道了字符字面量System.out.println('男'); System.out.println('A');♂ 明世隐:invalid character constant,大概意思就是“无效的字符常数”。♀ 小AD:就是说单引只能一个字符♂ 明世隐:对是这个意思,如果要多个字符,就用双引号表示字符串字面量。整形字面量System.out.println("第一次击杀"); System.out.println(200); System.out.println("第二次击杀"); System.out.println(180);♀ 小AD:这个我明白,200,180就是整形字面量♂ 明世隐:对的,不错。小数字面量System.out.println("的值是"); System.out.println(3.14); System.out.println("技能冷却时间(秒)"); System.out.println(3.5);布尔字面量System.out.println(true); System.out.prinszKeuhmGUtln(false);♀ 小AD:哥,我看这个true,false是关键字哦。♂ 明世隐:对的呀,布尔就两个值,true、false。♀ 小AD:哦。。♂ 明世隐:说的通俗点,当刺客突到你脸上的时候,你只有两种结果,没有第3种。♀ 小AD:不不不,有好几种,刺客生,刺客死,我生我死,他得200,我得200,你看有好多种情况吧。♂ 明世隐:但你没发现你这些都是对立的吗?♀ 小AD:好像是哦。♂ 明世隐:你就这样想,他突到你脸上,你的结果是什么就不会搞不明白。你的结果就2种,要么活,要么死。还有第3种情况吗。♀ 小AD:不好意思我有复活甲。♂ 明世隐:不好意思,既然是复活甲,那就是活,况且别人压起身,你还不得死。结果就只有生和死,没有别的。♀ 小AD:嗯,我知道了。明哥讲问题真的透彻哦。♂ 明世隐:没办法,谁叫哦遇到你这个大聪明呢?♀ 小AD:我猜你肯定在夸我,虽然我后背有一丝丝的凉。♀ 小AD:哥最后一个空字面我知道了,肯定这样写System.out.println(null);♀ 小AD:明哥,报错了,之前的不都这么写吗?♂ 明世隐:System.out.println()括号中如果传入null,不同形式的null最终的输出也不同。如果是直接传入null,则会报错,因为无法确定传入的值是什么对象。♀ 小AD:额。。不懂♂ 明世隐:意思就是别这么用,后面的章节会具体说明。♀ 小AD:好吧常量♀ 小AD:明哥明哥,我想发个言♂ 明世隐:哟,还举手发言拉,可以啊,今天送你一颗星(明日之星)。♀ 小AD:明哥威武,我想说常量很好理解,就比如我的身份证号码,从我出生到最后都是一样的,是不是可以看作是常量。♂ 明世隐:嗯,不错啊,这个确实可以这样理解的。♀ 小AD:还有还有,你看我的容颜,从小到大,都这么好看,以后也一直是这样的,也是一个常量♂ 明世隐:你这个叫好看?得了吧,你这个叫不丑。♀ 小AD:你要这么说的话,你跟打野对喷的时候,我可就不讲话了。♂ 明世隐:开什么玩笑,我专业喷子30年,就这些小学生,我喷他们可以不带脏字。♀ 小AD:你这个确实。。。有点溜♂ 明世隐:高端的喷子,往往喷人于无形。常量:是final关键字修饰的变量(在c语言中是被const修饰),初始化必须赋值,且类型和值不能再改变。public static void main(String[] args) { final String card = "3603749832492349"; System.out.println("身份证:"+card); }♀ 小AD:如果我给它修改一下呢?♂ 明世隐:那就会编译报错。♂ 明世隐:意思就是不能给常量赋值。♀ 小AD:我知道了,哥我有个好想法!♂ 明世隐:说说看。♀ 小AD:我把我击杀敌人获得的金币设置成常量,就不会越来越不值钱的♂ 明世隐:你这想法,有点邪恶啊。♀ 小AD:我全部设置成第一滴血的金币值,我看谁拦得住我,你看我写的代码。public static void main(String[] args) { final int gold=300; System.out.println("第1滴血:"); System.out.println(gold); System.out.println("第2次击杀获得:"); System.out.println(gold); System.out.println("第3次击杀获得:"); System.out.println(gold); System.out.println("小鲁班已经无人可挡了:"); System.out.println(gold); System.out.println("小鲁班正在大杀特杀:"); System.out.println(gold); System.out.println("小鲁班正在大杀特杀:"); System.out.println(gold); System.out.println("小鲁班已经超神了:"); System.out.println(gold); }♂ 明世隐:我草,这么灵性!♀ 小AD:你不是说程序员可以为所欲为吗?♂ 明世隐:这个倒是实话,你这都是第一滴血的钱,不爽到死啊 。♀ 小AD:对啊,我的程序我做主,我说了算♂ 明世隐:可惜不是你说了算,因为王者,马总说了算。♀ 小AD:我不管♂ 明世隐:行吧,今天多送你两颗星我说了算。♀ 小AD:明哥威武,起飞!
2023年03月24日
233 阅读
1 评论
0 点赞
2022-05-02
java 随机生成验证码 思路
通过ASCII表生成大小写验证码 public static void main(String[] args) { System.out.println( createCode(6)); } public static String createCode(int n){ //int n 表示随机生成几位 Random r = new Random(); String code = ""; for (int i = 0; i < n; i++) { int type = r.nextInt(3); switch (type){ case 0: //大写字母 ASCII码 char ch = (char)(r.nextInt(25)+65); code += ch; break; case 1: //小写字母 ASCII码 char ch1 = (char)(r.nextInt(25)+97); code += ch1; break; case 2: //数字 code += r.nextInt(10); break; } } return code ; } }
2022年05月02日
408 阅读
3 评论
0 点赞
2022-04-10
tomcat 报错: A child container failed during start 解决方法
错误详情涓ラ��: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]] at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) ... 7 more Caused by: java.lang.LinkageError: loader constraint violation: loader org.apache.catalina.loader.WebappClassLoader @53e582eb (instance of org.apache.catalina.loader.WebappClassLoader, child of org.codehaus.plexus.classworlds.realm.ClassRealm @257e0827 org.codehaus.plexus.classworlds.realm.ClassRealm) wants to load interface javax.servlet.ServletContext. A different interface with the same name was previously loaded by org.codehaus.plexus.classworlds.realm.ClassRealm @257e0827 (instance of org.codehaus.plexus.classworlds.realm.ClassRealm, child of 'bootstrap'). at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550) at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458) at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1191) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:165) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5423) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 7 more 12�� 19, 2019 3:20:08 涓��� org.apache.catalina.core.ContainerBase startInternal 涓ラ��: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]] at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.startup.Tomcat.start(Tomcat.java:341) at org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.startContainer(AbstractRunMojo.java:1238) at org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.execute(AbstractRunMojo.java:592) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:955) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:290) at org.apache.maven.cli.MavenCli.main(MavenCli.java:194) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) at org.codehaus.classworlds.Launcher.main(Launcher.java:47) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: org.apache.catalina.LifecycleException: A child container failed during start at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 7 more 解决方法pom.xml文件中servlet-api和jsp-api的坐标中缺少scope,加载<scrop>就可以 <!--servlet和jsp--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency>
2022年04月10日
446 阅读
0 评论
0 点赞
2022-03-24
解决idea maven配置了Tomcat却在插件窗口不显示的问题
**注意看plugins标签所在的位置plugin的父标签plugins 可以直接放在build标签下也可以放在pluginManagement标签下而我们在创建maven项目的时候 默认存在的那个plugins标签是在pluginManagement标签下的而pluginManagement标签只是对插件的一种声明 而不会对插件进行加载所以解决办法如下:我们要在build标签下再写一个plugins标签然后再把plugin标签放进去下面是完整的pom.xml文件**<?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>org.example</groupId> <artifactId>hello_web2</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>hello_web2 Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>hello_web2</finalName> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!--配置端口号--> <port>80</port> <!--配置项目路径--> <path>/</path> </configuration> </plugin> </plugins> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>具体位置如下图所示
2022年03月24日
575 阅读
0 评论
1 点赞
2022-01-10
Java Cookie-设置/获取 判断用户是否为第一次访问 且记录访问时间 小Demo
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取cookies response.setContentType("text/html;charset=utf-8"); Cookie[] cookies = request.getCookies(); boolean flag = false; //返回数组遍历数组 寻找 lastTime参数 if (cookies != null && cookies.length >0){ //遍历 for (Cookie cookie : cookies) { //获取 cookie 键 寻找 lastTime String name = cookie.getName(); if ("lastTime".equals(name)){ flag = true; //如果有 就不是第一次登录 Date date = new Date(); //设置时间戳格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); //返回日期 String src_date = sdf.format(date); //设置 cookie cookie.setValue(src_date); //设置cookie 存活时间 cookie.setMaxAge( 60 * 60 * 24 * 30 ); //添加cookie response.addCookie(cookie); //获取 cookie String value = cookie.getValue(); //打印信息 response.getWriter().write("<h1>欢迎回来,您上次的访问时间为"+ value + "</h1>"); } } } if (cookies == null || cookies.length == 0 || flag == false) { Date date = new Date(); //设置时间戳格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); //返回日期 String src_date = sdf.format(date); //设置 cookie Cookie cookie = new Cookie("lastTime",src_date); //设置cookie 存活时间 cookie.setMaxAge( 60 * 60 * 24 * 30 ); //获取 cookie response.addCookie(cookie); response.getWriter().write("欢迎用户,您是第一次访问登录!"); } }
2022年01月10日
378 阅读
0 评论
1 点赞
2021-11-22
Java反射学习 基础案例--小记
package cc.bltang.demo01; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.Properties; public class ReflectDemo02 { public static void main(String[] args) throws Exception { //反射 案例 Properties pro = new Properties(); //加载配置文件,转换为一个集合 //获取Class目录下的配置文件 ClassLoader classLoader = ReflectDemo02.class.getClassLoader(); InputStream is = classLoader.getResourceAsStream("pro.properties"); pro.load(is); //获取配置文件中定义的数据 String className = pro.getProperty("className"); String methodName = pro.getProperty("methodName"); //加载类进内存 Class<?> aClass = Class.forName(className); //创建对象 // Constructor<?> c = aClass.getConstructor(); // Object obj = c.newInstance(); Object obj = aClass.newInstance(); //获取方法对象 Method method = aClass.getMethod(methodName); //执行方法 method.invoke(obj); } }
2021年11月22日
297 阅读
0 评论
0 点赞
2021-09-26
Java IO字节缓冲流实现复制文件。 -小记
package demo16; import java.io.*; public class Demo03CopyFor { public static void main(String[] args) throws IOException { long e = System.currentTimeMillis(); FileInputStream fis = new FileInputStream("D:\\C0103.MP4"); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream("E:\\C0103.MP4"); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] bytes = new byte[10240]; int len = 0; while ((len = bis.read(bytes))!= -1){ bos.write(bytes); } bis.close(); bos.close(); long s = System.currentTimeMillis(); System.out.println("系统总耗时:"+(s-e)+"毫秒~"); } } 系统总耗时:40毫秒~
2021年09月26日
339 阅读
1 评论
0 点赞
2021-09-08
Java 斗地主综合案例:有序版--小记
结果:周润发:小王2♣A♦Q♦J♣10♠10♥9♥9♦8♠7♥6♦5♦5♣4♦3♥3♦刘德华:大王2♠2♥2♦A♥K♠K♥K♦K♣J♦10♣8♦6♠6♣4♠3♠3♣周星驰:A♠Q♠Q♥J♠J♥10♦9♠9♣8♥8♣7♦7♣6♥5♠5♥4♥4♣底牌:A♣Q♣7♠import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; /* 1.准备牌 2.洗牌 3.发牌 4.排序 5.看牌 */ public class Doudizhu { public static void main(String[] args) { //准备牌两个集合,一个存储牌一个存储牌的引索序列号。 //创建一个Map集合,存储拍的引索和组装好的牌 HashMap<Integer,String> poker = new HashMap<>(); //创建一个List 集合 存储牌的引索序列号 ArrayList<Integer> pokerIndex = new ArrayList<>(); List<String> colors = List.of("♠", "♥", "♦", "♣"); List<String> number = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"); //首先添加大王,小王 int index = 0; poker.put(index,"大王"); pokerIndex.add(index); index++; poker.put(index,"小王"); pokerIndex.add(index); index++; System.out.println(poker); System.out.println(pokerIndex); for (String numbers : number) { for (String color : colors) { poker.put(index,numbers + color); pokerIndex.add(index); index++; } } //2.洗牌 Collections shuffle(list) 方法 就行随机置放 Collections.shuffle(pokerIndex); System.out.println(pokerIndex); //3.发牌 创建玩家 以及底牌 ArrayList<Integer> player01 = new ArrayList<>(); ArrayList<Integer> player02 = new ArrayList<>(); ArrayList<Integer> player03 = new ArrayList<>(); ArrayList<Integer> diPai = new ArrayList<>(); //发牌判断 循环发牌 for (int i = 0; i < pokerIndex.size(); i++) { //获取牌的每一个索引 Integer in = pokerIndex.get(i); //进行底牌判断 if(i >= 51){ //给底牌发牌 diPai.add(in); } else if (i % 3 ==0){ //给玩家一发牌 player01.add(in); }else if (i % 3 ==1){ //给玩家一发牌 player02.add(in); }else if (i % 3 ==2){ //给玩家一发牌 player03.add(in); } } //4.排序 利用 Collections。sort(list) 方法 给牌排序 Collections.sort(player01); Collections.sort(player02); Collections.sort(player03); Collections.sort(diPai); getLook("周润发",poker,player01); getLook("刘德华",poker,player02); getLook("周星驰",poker,player03); getLook("底牌",poker,diPai); } public static void getLook(String name,HashMap<Integer,String> poker,ArrayList<Integer> list){ System.out.print(name+ ":"); for (Integer key : list) { String value = poker.get(key); System.out.print( value +""); } System.out.println(); } }
2021年09月08日
416 阅读
0 评论
0 点赞