java中使用Servlet实现验证码

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载请标明原博地址: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、效果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/m0_37898659/article/details/82585871