毕业论文写作

毕业设计需求

Java毕业设计如何中使用Servlet生成验证码图片

 标题:Java毕业设计如何中使用Servlet生成验证码图片

价格:0元
类型:毕业设计任务要求
 

点击上方蓝字  关注我们

 

一、实现思路

使用BufferedImage用于在内存中存储生成的验证码图片

使用Graphics来进行验证码图片的绘制,并将绘制在图片上的验证码存放到session中用于后续验证

最后通过ImageIO将生成的图片进行输出

页面通过访问servlet来获取并展示验证码

在后台获取页面提交的验证码,然后和存放在session中的验证码进行比对,进行校验

二、生成验证码

生成验证码的servlet,如下所示:

@WebServlet("/code")public class CodeController {    @Override    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        request.setCharacterEncoding("utf-8");        BufferedImage bfi = new BufferedImage(80,25,BufferedImage.TYPE_INT_RGB);        Graphics g = bfi.getGraphics();        g.fillRect(0, 0, 80, 25);        //验证码字符范围        char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();        Random r = new Random();        int index;        StringBuffer sb = new StringBuffer(); //保存字符串        for(int i=0; i<4; i++){            index = r.nextInt(ch.length);            g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));            Font font = new Font("宋体", 30, 20);            g.setFont(font);            g.drawString(ch[index]+"", (i*20)+2, 23);            sb.append(ch[index]);        }        // 添加噪点        int area = (int) (0.02 * 80 * 25);        for(int i=0; i<area; ++i){            int x = (int)(Math.random() * 80);            int y = (int)(Math.random() * 25);            bfi.setRGB(x, y, (int) (Math.random() * 255));        }        //设置验证码中的干扰线        for (int i = 0; i < 4; i++) {            //随机获取干扰线的起点和终点            int xstart = (int)(Math.random() * 80);            int ystart = (int)(Math.random() * 25);            int xend = (int)(Math.random() * 80);            int yend = (int)(Math.random() * 25);            g.setColor(interLine(1, 255));            g.drawLine(xstart, ystart, xend, yend);        }        HttpSession session = request.getSession();  //保存到session        session.setAttribute("verificationCode", sb.toString());        ImageIO.write(bfi, "JPG", response.getOutputStream());  //写到输出流    }    private Color interLine(int Low, int High){        if(Low > 255)            Low = 255;        if(High > 255)            High = 255;        if(Low < 0)            Low = 0;        if(High < 0)            High = 0;        int interval = High - Low;        int r = Low + (int)(Math.random() * interval);        int g = Low + (int)(Math.random() * interval);        int b = Low + (int)(Math.random() * interval);        return new Color(r, g, b);    }}

 

 

 

————————————————

版权声明:本文为CSDN博主「IT教育-汤小洋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/tangyang8941/article/details/119853780




更多精彩请继续关注小编了解哦!

 

计算机毕业设计(源程序+论文+开题报告+文献综述+翻译+答辩稿)

联系QQ:2932963541进行咨询

网站地址:
http://www.webtmall.com/
扫码关注最新动态


点击此处“阅读全文”查看更多内容

 

最新毕业设计成品

版权所有© 帮我毕业网 并保留所有权利

QQ 1370405256 微信 biyebang

QQ:629001810微信:biyebang

收缩