实现验证码模块

写在一个servlet里面的


    1;创建一个对象,在内存中画图
   
    2:美化这个图片
    3:将图片输入到页面展示
    
            //服务器通知浏览器不要缓存
        response.setHeader("pragma","no-cache");
        response.setHeader("cache-control","no-cache");
        response.setHeader("expires","0");
        
        //1...在内存中创建一个长80,宽30的图片,默认黑色背景
        //参数一:长
        //参数二:宽
        //参数三:颜色
        int width=80;
        int height = 30;
        // BufferImage  创建生成图片对象
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        
        //2,...美化图片
        // 获取画笔
        Graphics g = image.getGraphics();
        //设置画笔颜色为灰色
        g.setColor(Color.GRAY);
        //填充图片
        g.fillRect(0,0, width,height);

        //画边框
        g.setColor(Color.GREEN);
        g.drawRect(0,0,width-1,height-1);  //减去一  因为边框也要1个像素
        
        //产生4个随机验证码,12Ey
        String checkCode = getCheckCode();
        //将验证码放入HttpSession中
        
        request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);
        
        //设置画笔颜色为黄色
        g.setColor(Color.YELLOW);
        //设置字体的小大
        g.setFont(new Font("黑体",Font.BOLD,24));
        //向图片上写入验证码
        g.drawString(checkCode,15,25);

        //  5....加入干扰线
        g.setColor(Color.PINK);
            //随机生成坐标  画干扰线
        Random ran = new Random();
        for(int i=0;i<=10;i++){
            int x1=ran.nextInt(width);
            int x2=ran.nextInt(width);
            int y1=ran.nextInt(height);
            int y2=ran.nextInt(height);
            g.drawLine(x1,x2,y1,y2);
        }

 


        //3....将内存中的图片输出到浏览器
        //参数一:图片对象
        //参数二:图片的格式,如PNG,JPG,GIF
        //参数三:图片输出到哪里去
        //Java中提供了ImageIO工具类来实现图像文件与BufferedImage对象之间的转换。
        ImageIO.write(image,"PNG",response.getOutputStream());
    }
    /**
     * 产生4位随机字符串
     */
    private String getCheckCode() {
        String base = "0123456789ABCDEFGHIJKLMNabcdefghijklmn";
        int size = base.length();    //size为下标
        Random r = new Random();
        StringBuffer sb = new StringBuffer();
        for(int i=1;i<=4;i++){
            //产生0到size-1的随机值
            int index = r.nextInt(size);
            //在base字符串中获取下标为index的字符
            char c = base.charAt(index);
            //将c放入到StringBuffer中去
            sb.append(c);
        }
        return sb.toString();

            
            
            
    
    
    使用jsp完成、
    
    <img src="checkCode" alt="" οnclick="changeCheckCode(this)"></span>  //checkCode直接跳转到checkCodeservlt
        function changeCheckCode(img) {
            img.src="checkCode?"+new Date().getTime();   //加时间后,每次缓存的都不一样
           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值