随机验证码实现案例
来源:互联网 发布:linux压缩文件命令 编辑:程序博客网 时间:2024/05/19 11:49
众所周知,验证码在我们的生活中都是非常常见的,很多公司都在各种折腾各种各样的验证码,这里简要的用一个小案例来实现验证码的功能(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="看不清,换一张" onclick="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");
好吧,基本上说完了,将以上知识整个起来就可以实现你的一个项目的功能了,快去试试吧!
1 0
- 随机验证码实现案例
- Java案例之随机验证码功能实现
- Servlet实现随机验证码
- 动手实现随机验证码
- 如何实现随机验证码
- 随机图片验证码实现
- Ext随机验证码实现
- js 实现随机验证码
- Java 实现随机验证码
- 画布实现随机验证码
- 【案例】验证码的实现
- Python案例-验证码实现
- 用Java实现随机验证码功能
- Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- AFNetworking读取和设置cookie的解决方案
- zoj1420Cashier Employment【差分约束系统论文题】
- 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
- UITableable代理执行的顺序
- python字符串操作和string模块代码分析
- 随机验证码实现案例
- iOS- 指压即达,如何集成iOS9里的3D Touch
- android studio 学习笔记
- C++第1次实验
- C++第一次实验
- Rabbitmq 开发说明
- js获取所点击<a>的href值
- 学习iOS、React Native、算法开发的建议
- 机器学习一小步:Kaggle上的练习Titanic: Machine Learning from Disaster(二)