随机验证码实现案例

众所周知,验证码在我们的生活中都是非常常见的,很多公司都在各种折腾各种各样的验证码,这里简要的用一个小案例来实现验证码的功能(ps:其实我挺讨厌验证码这个东西的)。

   建立一个javaweb工程,新建login.html,在里面主要是写界面,代码实现如下,写在body区就可以了,来一个表单验证

<body><form action="">username:<input/><br/>password:<input/><br/>验证码:<input name="code"/><img id="image1" src="/day08_response/servlet/responseDemo4"/><input type="button" value="看不清,换一张" οnclick="change()"/><br/><input type="submit" value="登陆"/></form><script type="text/javascript">function change(){var imageObj = document.getElementById("image1");//地址一样,浏览器不会发出请求imageObj.src="/day08_response/servlet/responseDemo4?time="+new Date().getTime();}</script></body>


然后我们需要新建一个servlet类,实现验证码我们可以有两种方式,一种是自己写,如下:颜色可以直接配置就好,好吧,鉴于我的审美观有限,貌似这种颜色搭配起来挺丑的。

private void test1(HttpServletResponse response) throws IOException {int width=110;int height=25;//1构建一幅内存图片BufferedImageBufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);//3.图片上的画笔Graphics g=bi.getGraphics();g.setColor(Color.green);g.drawRect(0, 0, width, height);   //画矩形边线//4填充背景色g.setColor(Color.gray);g.fillRect(1, 1, width, height);//5干扰线g.setColor(Color.yellow);Random r=new Random();for(int i=0;i<20;i++)g.drawLine(r.nextInt(width), r.nextInt(height),r.nextInt(width), r.nextInt(height));//6数字验证码g.setColor(Color.BLACK);g.setFont(new Font("宋体",Font.BOLD|Font.ITALIC,13));//加粗倾斜int x=20;for(int i=0;i<4;i++){g.drawString(r.nextInt(10)+"",x,20);x+=20;}	//2输出响应对象的字节流输出流ImageIO.write(bi, "jpg", response.getOutputStream());}

还有一种方法可以使用,开源框架validate.jar,导入这个jar包,两行代码就可以搞定,当然了,如果你想要更好的效果,你可以自己写或者看里面的.class中的源码,自己进行修改,这里就不在多废话了。

//开源框架实现ValidateCode vc=new ValidateCode(110, 25, 4, 30);//第一个参数是宽,第二个是高,第三个是验证码的数目,第四个是干扰线的条数vc.write(response.getOutputStream());

最后,我们还需要清除一下浏览器的缓存,我们都知道,清除缓存当然是用那三种方法啦。

//清除缓存response.setIntHeader("Expires", -1);response.setHeader("Cache-Control", "no-cache");response.setHeader("Pragma", "no-cache");

哦?你还不满意,好吧,那我们再加一个定时刷新的功能吧!

第一种刷新方式是直接刷新:

private void test1(HttpServletResponse response) throws IOException {response.setIntHeader("Refresh", 1);//单位是秒Random r = new Random();response.getWriter().write(r.nextInt()+"");}
当然,我们还可以来那种倒计时几秒钟就跳转到其他页面的这种效果,

//刷新到别处private void test2(HttpServletResponse response) throws IOException {response.setContentType("text/html;charset=UTF-8");response.getWriter().write("注册成功!2秒后自动转向登陆页面。");response.setHeader("Refresh", "2;URL=/day08_response/login.html");//单位是秒}
下面再来说一下控制浏览器缓存时间的实现方法:

response.setDateHeader("Expires", System.currentTimeMillis()+1*60*60*1000);//取值是一个毫秒值。如果该值小于当前时间,则不缓存。//如果大于当前时间,缓存的时间是:值-当前时间。response.getWriter().write("hello");

好吧,基本上说完了,将以上知识整个起来就可以实现你的一个项目的功能了,快去试试吧!

转载于:https://www.cnblogs.com/sdksdk0/p/5585071.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题——剑指 Offer24反转链表

如果您是第一次看我写的博客&#xff0c;可以给我点个赞并关注我吗&#xff0c;我会持续分享更多有意思的干货。 文章目录1 题目2 思路3 代码4 小结1 题目 剑指 Offer 24. 反转链表 定义一个函数&#xff0c;输入一个链表的头节点&#xff0c;反转该链表并输出反转后链表的头…

手把手教你写专利申请书/怎样申请专利

手把手教你写专利申请书怎样申请专利摘要小前言&#xff08;一&#xff09;申请前的准备工作 1、申请前查询 2、其它方面的考虑 3、申请文件准备&#xff08;二&#xff09;填写专利申请系列文档 1、实际操作步骤 2、详细操作 3、经验分享、注意事项&#xf…

计算机无法更新正在撤销更改,win7系统无法完成更新正在撤销更改的解决办法...

win7系统无法完成更新正在撤销更改的解决办法&#xff1f;如果我们在使用win7更新系统的时候&#xff0c;出现了win7无法完成更新正在撤销更改请不要关闭你的计算机这样的提示&#xff0c;而且不关闭提醒就会一直收到提示。小编觉得可以在win7设置中的更新和安全里面进行高级选…

libhiredis.so.0.13: cannot open shared object file: No such file or directory in Unknown on line

vim /etc/ld.so.conf添加 /usr/local/lib (此处为动态链接库的目录) ldconfig 转载于:https://www.cnblogs.com/dongbo/p/8336542.html

mycat读写分离部署步骤

1.下载mycat:https://raw.githubusercontent.com/MyCATApache/Mycat-download/master/1.5-RELEASE/Mycat-server-1.5-RELEASE-20160301083012-linux.tar.gz2.安装mycat:tar -zxvf Mycat-server-1.5-GA-20160225120029-linux.tar.gzmv mycat /srv/mycat-1.5ln -s mycat-1.5 my…

王道操作系统考研笔记——1.1.6 系统调用

如果这篇博客对您有用的话&#xff0c;可以给我点个赞吗&#xff0c;这对我很重要&#xff0c;谢谢&#xff01;❤️ 文章目录1.1.6 系统调用1.1.6.1 系统调用和作用1.1.6.2 系统调用和库函数1.1.6.3 系统调用背后的过程1.1.6.4 小结1.1.6 系统调用 知识总览 1.1.6.1 系统调用…

jQuery年月日(生日)选择器

我们在编辑用户资料时经常会遇到选择生日选项的问题&#xff0c;今天我给大家介绍如何使用js来实现年月日&#xff08;生日&#xff09;选择器&#xff0c;能够准确计算闰年的年月日&#xff0c;方便表单处理。 文章&#xff1a;http://www.helloweba.com/view-blog-263.html 演…

计算机设备行业特征,自动装配机在自动化设备行业具有的特点

伴随着社会经济的不断发展&#xff0c;工业生产的市场规模越来越大&#xff0c;人们的需求也越来越大。自动装配机在自动化设备行业具有哪些特点?鲁工自动化小编对自动装配机的特点进行了分析。1.自动装配机需要由多台工作台进行扩展和分级。上层控制器&#xff0c;用来控制二…

Elasticsearch使用REST API实现全文检索

Elasticsearch REST API elasticsearch支持通过http请求响应服务,http请求默认使用9200断开&#xff0c;因此通过curl命令&#xff0c;可以发送http请求&#xff0c;并得到json返回内容。常用的REST API包括一下几个&#xff1a; 检查ES集群状态 curl http://localhost:9200/_c…

解决 MyEclipse build workspace 慢,validation javascript 更慢的问题

自从升级了MyEclipse到7.0&#xff0c;项目Build的时候总是很慢&#xff0c;显示Validating 那些js&#xff0c;html文件。不管我怎么调整 Windows > Preference > MyEclipse > Validation或者是manage validation,都没有用。 我公司的电脑是Core2 Duo CPU T7250 2.0…

Netty实例-简单的服务端-client实现,凝视具体

书籍推荐&#xff1a; 实例代码 &#xff1a; http://download.csdn.net/detail/jiangtao_st/7677503Netty Server端实现/*** * <p>* Netty Server Simple* </p>* * author 卓轩* 创建时间&#xff1a;2014年7月7日* versi…

数据结构杂谈(四)

本文的所有代码均由C编写 4 双链表、循环链表和静态链表 文章目录4 双链表、循环链表和静态链表4.1 双链表4.1.1 双链表的定义4.1.2 双链表的初始化4.1.2 双链表的后插操作4.1.3 双链表的后删操作4.1.4 双链表的销毁操作4.2 循环链表4.2.1 循环链表的概念4.2.2 循环单链表4.2.2…

量子计算机怎么储存,什么是量子计算机_量子计算机原理_量子计算的两种有效方法...

量子计算机是一种可以实现量子计算的机器&#xff0c;是一种通过量子力学规律以实现数学和逻辑运算&#xff0c;处理和储存信息能力的系统。它以量子态为记忆单元和信息储存形式&#xff0c;以量子动力学演化为信息传递与加工基础的量子通讯与量子计算&#xff0c;在量子计算机…

Spring注解依赖注入的三种方式的优缺点以及优先选择

当我们在使用依赖注入的时候&#xff0c;通常有三种方式&#xff1a; 1.通过构造器来注入&#xff1b; 2.通过setter方法来注入&#xff1b; 3.通过filed变量来注入&#xff1b; 那么他们有什么区别吗&#xff1f;应该选择哪种方式更好&#xff1f; 代码示例&#xff1a; Const…

研究笔记:iOS中使用WebViewProxy拦截URL请求

本文为阿里iOS开发工程师阳翼所作。 先说明下iOS中加载url的正常流程&#xff1a; 1.客户端发送NSURLRequest给server 2.server返回对应的NSURLResponse 如果被WebViewProxy拦截&#xff0c;则流程变为&#xff1a; 1.客户端发送NSURLRequest给server 2.这个request被WebV…

seo超强外部链接、内部链接技巧

轮链-混链对做内外链都是非常有效果的&#xff01; 外连&#xff0c;之于大家并不陌生&#xff0c;增加外链的方法也海了去&#xff0c;如软文推广、博客推广、友情链接等等等等&#xff0c;在这里我就不再累述&#xff0c;最近在一些文章里看到轮链和混链的SEO优化技巧&#x…

王道操作系统考研笔记——1.1.5 中断和异常

如果这篇博客对您有用的话&#xff0c;可以给我点个赞吗&#xff0c;这对我很重要&#xff0c;谢谢&#xff01;❤️ 文章目录1.1.5 中断和异常1.1.5.1 中断机制的诞生1.1.5.2 中断的概念和作用1.1.5.3 中断的分类1.1.5.4 小结1.1.5 中断和异常 知识总览 1.1.5.1 中断机制的诞…

0101代码构成了计算机语言,计算机(全国一级考试)理论复习要点、模拟题.doc

第一部分 计算机基础知识计算机是能超高速自动进行算术运算和逻辑运算的电子机器&#xff1b;第一台计算机诞生于1946年(取名为ENIAC)&#xff0c;在短短的50多年时间&#xff0c;已经历了四代&#xff1a;第一代电子管计算机、第二代晶体管计算机、第三代集成电路计算机(中小规…

PHP gd库 验证码

需要的简单前台页面 <html><head><meta http-equivContent-Type contenttext/html; charsetutf-8><title>验证码</title></head><script type"text/javascript"> function yanz() { document.getElementById…

LR+Jenkins实践思路

思路&#xff1a;在Loadrunner的安装bin目录下有Loadrunner Control模块的启动程序 “Wlrun.exe”&#xff0c;想利用Jenkin的 windows的batch命令持续构建一个任务&#xff0c;自动启动运行场景&#xff0c;且把结果发给analysis 通过Batch来调用LR场景&#xff1a; Loadrunne…