开发验证码功能
完成了以上的工作之后,我们就是可以开始开发登录界面中另一个重要的功能,就是验证码功能。
首先,我们新创建一个CaptchaController
的类:
同样,也是继承HttpServlet
,并且配置好WebServlet
(配置WebServlet的方法,参考Java进阶开发课堂笔记(四)),此次我们重写的是service
:
因为验证码是一张图片,而不是一个文本,所以,我们先创建一个缓冲区BufferedImage
来存放图片,使用Graphics
这个是抽象类,用来传给paint()
方法作为画笔的,此时我们需要用的得命令有:
命令包含了设置背景颜色,字体大小,格式,增加斜线和噪点的代码。
因为验证码非固定文本,所有我们要定义一个方法,随机获取字符:
建议将容易混淆的字母去除,当然不去除也是可以的。
定义一个方法后,我们可以在main
文件夹下创建一个Test
文件夹用来测试方法的是否可用:
测试完,方法是可以使用之后,在CaptchaController
里面,我们就可以调用它:
String code =randomString(4); //调用随机生成验证码的方法
g.drawString(code,25,32);
(具体位置可查看先前图片中,标有提示)
最后,我们要在浏览器中显示验证码:
完成以上操作后,就基本完成了验证码的开发,我们现在运行起来看一下。
优化验证码
这个是上面已经完成的验证码,此时我想随机获取验证码的字体颜色、斜线的颜色和噪点的颜色,我们可以定义一个getRandomColor
方法通过用16进制的颜色代码,进行随机取色:
private static Color getRandomColor(){
Random random = new Random();
Color color =new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
return color;
}
方法定义好之后,我们分别在字体、斜线和噪点的代码中使用g.setColor(getRandomColor);
来调用这个方法,完成之后,我们运行一下,看下结果:
最后,不要忘了提交代码到本地仓,并push到远程仓库去。