免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1085 | 回复: 0
打印 上一主题 下一主题

调用awt生成图片验证码的servlet [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-05 11:42 |只看该作者 |倒序浏览

                转自网上,但原地址已经丢失。
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ImageServlet extends HttpServlet
{
        protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException
        {
     
//        设置页面不缓存
        response.setHeader("Pragma","No-cache");
        response.setHeader("Cache-Control","no-cache");
        response.setDateHeader("Expires", 0);
//         在内存中创建图象
        int width=60, height=20;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//         获取图形上下文
        Graphics g = image.getGraphics();
//        生成随机类
        Random random = new Random();
//         设定背景色
        g.setColor(getRandColor(200,250));
        g.fillRect(0, 0, width, height);
//        设定字体
        g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//        画边框
//        g.setColor(new Color());
//        g.drawRect(0,0,width-1,height-1);
//         随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
        g.setColor(getRandColor(160,200));
        for (int i=0;i155;i++)
        {
            int x = random.nextInt(width);
            int y = random.nextInt(height);
                int xl = random.nextInt(12);
                int yl = random.nextInt(12);
            g.drawLine(x,y,x+xl,y+yl);
        }
//         取随机产生的认证码(4位数字)
//        String rand = request.getParameter("rand");
//        rand = rand.substring(0,rand.indexOf("."));
        String sRand="";
        for (int i=0;i4;i++){
            String rand=String.valueOf(random.nextInt(10));
            sRand+=rand;
            // 将认证码显示到图象中
            g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
            g.drawString(rand,13*i+6,16);
        }
        
         HttpSession session=request.getSession();
        //     将认证码存入SESSION
    //session变量名最好用public静态变量设置
        session.setAttribute("number",sRand);
//         图象生效
        g.dispose();
//         输出图象到页面
        ImageIO.write(image, "JPEG", response.getOutputStream());
        }
        
        Color getRandColor(int fc,int bc){//给定范围获得随机颜色
            Random random = new Random();
            if(fc>255) fc=255;
            if(bc>255) bc=255;
            int r=fc+random.nextInt(bc-fc);
            int g=fc+random.nextInt(bc-fc);
            int b=fc+random.nextInt(bc-fc);
            return new Color(r,g,b);
            }
        protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException
        {
            doGet(request,response);
        }
      
}
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15719/showart_243003.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP