为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

验证码的实现

2011-11-21 4页 doc 53KB 446阅读

用户头像

is_703691

暂无简介

举报
验证码的实现码实现 做注册模块,需要图片验证码机制。google了一圈,自己再整理修改了一下,总算是弄出来了。思路就是在一个action里应用java的awt包里面的类绘制一个内存中的图片,然后产生随机数并将随机数写到图片上,然后把action的返回类型设为stream,把图片数据写入到输入流返回给浏览器。html可以通过img页面直接用src属性引用该action     action的代码如下 1. import java.io.*; 2. import javax.imageio.ImageIO; 3. import...
验证码的实现
码实现 做注册模块,需要图片验证码。google了一圈,自己再整理修改了一下,总算是弄出来了。思路就是在一个action里应用java的awt包里面的类绘制一个内存中的图片,然后产生随机数并将随机数写到图片上,然后把action的返回类型设为stream,把图片数据写入到输入流返回给浏览器。html可以通过img页面直接用src属性引用该action     action的代码如下 1. import java.io.*; 2. import javax.imageio.ImageIO; 3. import javax.imageio.stream.ImageOutputStream; 4. import java.awt.*; 5. import java.awt.Color; 6. import java.awt.image.BufferedImage; 7. //DefaultAction类继承了ActionSupport 并定义了session变量 8. public class CreateValidateAction extends DefaultAction { 9.     private ByteArrayInputStream inputStream; 10.     //产生四个0~9的随机数,放在一个字符串里 11.     public String createRandomString() { 12.         String str = ""; 13.         for (int i = 0; i < 4; i++) { 14.             str += Integer.toString((new Double(Math.random() * 10)).intValue()); 15.         } 16.         return str; 17.     } 18.     //随机产生一个颜色 19.     public Color createsRandomColor() { 20.         int r = (new Double(Math.random() * 256)).intValue(); 21.         int g = (new Double(Math.random() * 256)).intValue(); 22.         int b = (new Double(Math.random() * 256)).intValue(); 23.         return new Color(r, g, b); 24.     } 25.     //生成一个内存图片,将四个随机数写在图片上 26.     public BufferedImage createImage(String str) { 27.         int width = 60; 28.         int height = 22; 29.         BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 30.         // 获取图形上下文 31.         Graphics g = image.getGraphics(); 32.         // 设定背景色 33.         g.setColor(Color.WHITE); 34.         g.fillRect(0, 0, width, height); 35.         //画边框 36.         g.setColor(Color.black); 37.         g.drawRect(0, 0, width - 1, height - 1); 38.         // 将认证码显示到图象中 39.         g.setFont(new Font("Atlantic Inline", Font.PLAIN, 18)); 40.         //使用随机颜色 41.         g.setColor(this.createsRandomColor()); 42.         //将随机字符串的每个数字分别写到图片上 43.         g.drawString(Character.toString(str.charAt(0)), 8, 17); 44.         g.drawString(Character.toString(str.charAt(1)), 20, 17); 45.         g.drawString(Character.toString(str.charAt(2)), 33, 17); 46.         g.drawString(Character.toString(str.charAt(3)), 45, 17); 47.         // 图象生效 48.         g.dispose(); 49.         return image; 50.     } 51.     //将图片的以字节形式写到InputStream里 52.     public ByteArrayInputStream createInputStream() throws Exception { 53.         //获取随机字符串 54.         String str=this.createRandomString(); 55.         BufferedImage image = this.createImage(str); 56.         //将产生的字符串写入session,供校验时使用 57.         this.getSession().put("validateCode", str); 58.         ByteArrayOutputStream output = new ByteArrayOutputStream(); 59.         ImageOutputStream imageOut = ImageIO.createImageOutputStream(output); 60.         ImageIO.write(image, "JPEG", imageOut); 61.         imageOut.close(); 62.         ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); 63.         output.close(); 64.         return input; 65.     } 66.     @Override 67.     public String execute() throws Exception { 68.         setInputStream(createInputStream()); 69.         return SUCCESS; 70.     } 71.      72.     public ByteArrayInputStream getInputStream() { 73.         return inputStream; 74.     } 75.     public void setInputStream(ByteArrayInputStream inputStream) { 76.         this.inputStream = inputStream; 77.     } 78. }     然后是对应的struts的配置 1.          2.          3.              4.                 image/jpeg 5.                 inputStream 6.              7.              最后就是html的写法,点击图片的时候可以更新验证码 1. 2.     function changeValidateCode(obj) { 3.         //获取当前的时间作为参数,无具体意义 4.         var timenow = new Date().getTime(); 5.         //每次请求需要一个不同的参数,否则可能会返回同样的验证码 6.         //据说和浏览器的缓存机制有关系,不太明白,照做吧 7.         obj.src="createValidateAction.action?d="+timenow; 8.     } 9. 10. posted on 2009-04-23 15:47 nicky 阅读(717) 评论(3)  编辑  收藏
/
本文档为【验证码的实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索