标题:Java毕业设计如何中使用Servlet生成验证码图片
一、实现思路
使用BufferedImage用于在内存中存储生成的验证码图片
使用Graphics来进行验证码图片的绘制,并将绘制在图片上的验证码存放到session中用于后续验证
最后通过ImageIO将生成的图片进行输出
页面通过访问servlet来获取并展示验证码
在后台获取页面提交的验证码,然后和存放在session中的验证码进行比对,进行校验
二、生成验证码
生成验证码的servlet,如下所示:
("/code")public class CodeController {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(); //保存到sessionsession.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进行咨询
版权所有© 帮我毕业网 并保留所有权利