如何在网页上生成验证码?

在平时的网站的注册和登录的时候我们经常会遇到要填写验证码的情况,验证码的存在是保护网站系统的一个良好的方式,今天我就来谈一谈我生成验证码的一些心得。


整体的使用思路:

  • 首先在Servlet的doGet方法中设置响应头的内容response.setHeader("Content-type", "image/jpeg");这是针对于图片信息的特有的方式。
  • 创建一个缓冲的图片流
  • 配置一些必要的参数,如字体,画笔等
  • 调用ImageIO的write方法,并发送给客户端生成的图片信息

下面就来深入的研究一下这些方法。

创建一个缓冲的图片流


先看一看API帮助文档吧
这里写图片描述
这样指定一下相关的参数和图片类型。

配置一些必要的参数,如字体,画笔等


这里写图片描述
首先我们可以直接看到的是这个方法会返回一个Graphics对象,直接的操作就可以完成相应的内容,但是要想做一些更加精细化的操作,我们就可以借助于Graphics2D(帮助文档上的注解明显可以看得出这个方法就是在返回一个Graphics2D对象,这正好是我们所需要的)
这里写图片描述

调用ImageIO的write方法,并发送给客户端生成的图片信息


这里写图片描述
我们只需要传进去这个方法所需要的参数就好了!

至此,原理部分完成。下面请看一个具体的小例子吧。


案例展示


  • 原始输出:
private void showImage1(HttpServletResponse response) throws IOException {
        response.setHeader("Content-type", "image/jpeg");

        BufferedImage image = new BufferedImage(1000,500,BufferedImage.TYPE_INT_RGB);
        Graphics graphics = image.getGraphics();
        graphics.setColor(Color.GREEN);
        graphics.setFont(new Font(null,Font.ITALIC,200));
        graphics.drawString("123456789", 0, 200);
        ImageIO.write(image, "jpg", response.getOutputStream());
    }

结果如下:
这里写图片描述

  • 改变背景的输出:
    代码如下:
private void showImage2(HttpServletResponse response) throws IOException {
        response.setHeader("Content-type", "image/jpeg");

        BufferedImage image = new BufferedImage(1000,500,BufferedImage.TYPE_INT_RGB);

        Graphics2D graphics2D = (Graphics2D) image.getGraphics();

        graphics2D.fillRect(0, 0, 1000, 500);
        graphics2D.setFont(new Font(null,Font.BOLD,200));
        graphics2D.setColor(Color.GREEN);
        graphics2D.drawString("123456789", 0, 200);
        ImageIO.write(image, "jpg", response.getOutputStream());
    }

结果展示:
这里写图片描述


总结:

  • 掌握大致的流程,了解相关API的使用方法就可以完成这样的操作
  • 改进方向,将生成的验证码存储到session中,然后利用键值对的方式保存,在登陆的时候进行验证就是我们开发中会使用到的情景。
  • 好了,今天的内容就到这里吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值