网页生成验证码技术
2016-07-18 12:38
169 查看
后台servlet代码如下:
浏览器端代码如下:
值得一提的小技巧是,在js中,img的src后面带了个以时间毫秒数的参数t,保证每次请求都不同,以实现验证码更换功能,加入不带参数,浏览器以为是同一个请求,根据缓存机制,不会像服务器端发请求消息。
//告诉客户端此响应的格式 response.setContentType("image/jpeg"); int width = 80; int height = 40; //设置验证码图片的宽、高以及图片类型(这里是RGB类型) BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //拿到一个Graphics对象 Graphics g = img.getGraphics(); //绘制背景 g.setColor(Color.white); g.fillRect(0, 0, width, height); //设置字体 g.setFont( new Font("黑体",Font.BOLD,18)); //以毫秒时间为种子创建一个随机数生成器 Random r = new Random(new Date().getTime()); for(int i=0;i<4;i++){ //生成随机数字0-9 int a = r.nextInt(10); int y = 10+r.nextInt(20); //生成随机颜色 Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)); g.setColor(c); //将数字画到图片中 g.drawString(""+a, 5+i*width/4, y); } //绘制干扰线 // for(int i=0;i<10;i++){ // Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)); // g.setColor(c); // g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height)); // } //绘制干扰点 for(int i=0;i<100;i++){ Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)); g.setColor(c); int x = r.nextInt(width); int y = r.nextInt(height); g.drawLine(x, y, x, y); } //类似于流中的close()带动flush()---把数据刷到img对象当中 g.dispose(); ImageIO.write(img, "jpeg", response.getOutputStream());
浏览器端代码如下:
<html> <head> <title>模拟登陆界面</title> <script type="text/javascript"> function changeImg(){ var imgNode = document.getElementById("imgId"); var t = new Date().getTime(); imgNode.src = "/JavaWeb/img?"+t; } </script> </head> <body> 用户名:<input type="text" name="name"/><br/><br/> 密 码:<input type="password" name="pwd"/><br/><br/> 验证码:<input type="text" name="name"/> <img id="imgId" src="/JavaWeb/img"/> <a href="javascript:changeImg()">看不清</a><br/> <input type="submit" value="登录"/> </body> </html>
值得一提的小技巧是,在js中,img的src后面带了个以时间毫秒数的参数t,保证每次请求都不同,以实现验证码更换功能,加入不带参数,浏览器以为是同一个请求,根据缓存机制,不会像服务器端发请求消息。
相关文章推荐
- java自动生成验证码插件-kaptcha
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法
- 如何识别高级的验证码的技术总结第1/4页
- C#实现把彩色图片灰度化代码分享
- WinForm生成验证码图片的方法
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- 如何使用C#从word文档中提取图片
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- C#图片添加水印的实现代码
- 随鼠标移动的图片或文字特效代码
- CSS 图片横向排列实现代码
- C#实现将Email地址转成图片显示的方法
- C#实现图片加相框的方法