初识java web(二) 验证码的生成

关于java web的验证码生成

本节难点是对于Random随机数的使用,和BufferedImage画布的使用。

先写一个service用于后续用户界面获取验证码
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         ServletOutputStream sos = resp.getOutputStream();
//resp用于输出
        
        ImageIO.write(generatePic(100,80,builder),  "JPEG",sos);
        //获取传过来得字符
        String tempStr = builder.toString();

          // req.getSession().setAttribute("sessionCacheData",tempStr);
        sos.flush();
        sos.close();
    }

####进行画布的绘制

private BufferedImage generatePic(int width ,int height,StringBuilder builder){
        //获得一个彩色画布
        BufferedImage image=new BufferedImage(100,50,BufferedImage.TYPE_INT_BGR);
        Graphics g=image.getGraphics();
        //图片背景和框架
        g.setColor(Color.white);  //设置背景色
        g.fillRect(0,0,width,height);//显示矩形框架

    StringBuilder builder=new StringBuilder();
   //用于缓存存放随机四个字符


        //设置随机类
        String data="ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghijklmnpqrstuvwxyz";//随机字符 0O 1I等容易混淆的不用
        Random rnd=new Random();//设置随机类
        g.setFont(new Font("楷体",Font.BOLD,20));//设置字体类型,形状,大小

          //每个字符随机
         for (int i=0;i<=4;i++) {
             //随机字符
             int index = rnd.nextInt(data.length());
             //得到随机字符
             String str = data.substring(index, index + 1);


             //写入字符str,和存在的x,y位置
             g.drawString(str, (width / 6) * (i + 1), 20);

             //设置随机颜色
             Color color = new Color(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
             //字体得到随机颜色
             g.setColor(color);
            //写入字体得颜色a
             builder.append(str);
         }
         //制造噪点
        for(int j=0,n=rnd.nextInt(100);j<n;j++){
            g.setColor(Color.RED);
            g.fillRect(rnd.nextInt(width),rnd.nextInt(height),1,1);//随机噪音点
        }
    
        return  image;
    }
}
学习小结
  • BufferedImage彩色画布创建
  • Graphics 对于画布得绘制
    -Random随即类 random.nextInt(n)产生随机[0,n)区间得使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值