版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载请标明原博地址:https://blog.csdn.net/m0_37898659/article/details/82585871
一、验证码作用
验证码定义:是一种区别用户是计算机还是人的公共全自动程序;
二、使用servlet实现验证码
1、制作页面
①输入框
②显示验证码的图片
图片的路径直接指向servlet,可以在servlet中动态生成验证码。
2、生成图片需要用到的类:
(1)BufferedImage:图像数据缓冲区
(2)Graphics:绘制图片
(3)Color:获取颜色
(4)Random:生成随机数
(5)ImageIO:输出图片
3、步骤
ImageServlet类
(1)定义BufferedImage对象
(2)获取Graphics对象
(3)通过Random产生随机验证码信息
(4)使用Graphics绘制图片
(5)记录验证码信息到session中
(6)使用ImageIO输出图片
LoginServlet类
(1)获取页面验证码
(2)获取Session保存的验证码
(3)比较验证码
(4)返回校验结果
4、创建项目checkcode
(1) index.jsp
给img 标签加个id
编制刷新图片的JS代码
<script type="text/javascript">
function reloadCode(){
//定义一个时间
var time = new Date().getTime();
//时间不用,传参不同,可以重新进行请求
document.getElementById("imagecode").src="<%=request.getContextPath() %>/servlet/ImageServlet?d="+time;
}
</script>
(2) ImageServlet
public class ImageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
//图片加载对象 参数(长,宽,图片类型)
BufferedImage bi = new BufferedImage(68,22,BufferedImage.TYPE_INT_RGB);
//创建画笔
Graphics g = bi.getGraphics();
Color c = new Color(200,150,255);
g.setColor(c);
//给背景加个框框
g.fillRect(0, 0, 68, 22);
//随机字符串
char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
Random r = new Random();
int len=ch.length,index;
StringBuffer sb = new StringBuffer();
for(int i=0; i<4; i++){
index = r.nextInt(len);
//随机给生成的字符生成一个颜色
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
//把字符串写到图片上
g.drawString(ch[index]+"", (i*15)+3, 18);
sb.append(ch[index]);
}
//字符串放到Session中
request.getSession().setAttribute("piccode", sb.toString());
//输出图片
ImageIO.write(bi, "JPG", response.getOutputStream());
}
}
5、效果: