zoukankan      html  css  js  c++  java
  • jsp页面简单的验证码实现

    前段时间赶着结束毕业设计任务,现在完成了。回来补一下设计毕业设计的过程中遇到的问题和解决方案。

    为了使小系统更有模有样,这里尝试在登录页面实现验证码功能。现描述一下我的解决方案。

    首先看一下实现后的界面:只要点击一下图片就可以刷新一次验证码,只有正确输入验证码后才能继续正常的登录操作,不区分大小写。

    直接上代码

    首先在index.jsp页面验证码相应代码:

    1 <input type="text" id="checkCode"name="checkCode" style="100px" /> <a
    2                                     href="javascript:reloadCode()"> <img alt="验证码"
    3                                         id="imagecode" src="ServletDemo4" />

    同样,在登录页面引入javascript小函数负责验证码切换的功能

    <script type="text/javascript" language="javascript">
                function reloadCode() {//切换验证码
                    var time = new Date().getTime();
                    document.getElementById("imagecode").src = "ServletDemo4?d="
                            + time;
                }
            </script>

    接下来是后台绘画验证码的java代码:(详细代码描述见注释,这里不赘述)

    这里主要应用了BufferedImage 类功能,它可以创建一个图像缓存区,并且在这基础上可以按我们的想法对其进行操作

     1 package management;
     2 
     3 import java.awt.Color;
     4 import java.awt.Graphics;
     5 import java.awt.image.BufferedImage;
     6 import java.io.IOException;
     7 import java.util.Random;
     8 
     9 import javax.imageio.ImageIO;
    10 import javax.servlet.annotation.WebServlet;
    11 import javax.servlet.http.HttpServlet;
    12 import javax.servlet.http.HttpServletRequest;
    13 import javax.servlet.http.HttpServletResponse;
    14 @WebServlet(name = "ServletDemo4", urlPatterns = { "/ServletDemo4" })
    15 public class ServletDemo4 extends HttpServlet {
    16     public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    17         //这个方法实现验证码的生成
    18         BufferedImage bi = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);//创建图像缓冲区
    19 
    20         Graphics g = bi.getGraphics(); //通过缓冲区创建一个画布
    21 
    22         Color c = new Color(255, 255, 255); //创建颜色
    23          /*根据背景画了一个矩形框
    24           */
    25         g.setColor(c);//为画布创建背景颜色
    26 
    27         g.fillRect(0, 0, 68, 22); //fillRect:填充指定的矩形
    28         // X和Y用于指定矩形左上角也就是相对于原点的位置,width和height用于指定矩形的宽和高。
    29 
    30         char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//转化为字符型的数组
    31         Random r = new Random();
    32         int len = ch.length;
    33         int index; //index用于存放随机数字
    34         StringBuilder sb = new StringBuilder();
    35         for (int i = 0; i < 4; i++) {
    36             index = r.nextInt(len);//产生随机数字
    37             g.setColor(new Color(r.nextInt(88), r.nextInt(188), r.nextInt(255)));  //设置颜色随机
    38             g.drawString(ch[index] + "", (i * 15) + 3, 18);//画数字以及数字的位置
    39             sb.append(ch[index]);
    40         }
    41         request.getSession().setAttribute("piccode", sb.toString()); //将数字保留在session中,便于后续的使用
    42         ImageIO.write(bi, "JPG", response.getOutputStream());
    43     }
    44 }

    接下来是loginservlet中关于验证码处理的核心代码:

    1 /*获取验证码与用户输入的验证码数据*/
    2         String piccode = (String) request.getSession().getAttribute("piccode");
    3         String checkCode = request.getParameter("checkCode");  //取值
    4         checkCode=checkCode.toUpperCase(); //把字符串中的字母全部转换为大写

    使用:

    只需要比对输入的字符串是否和session保存的piccode相同即可实现验证码的功能

     if (checkCode.equals(piccode)) {//满足即输入验证码正确
    。。。。
    }
  • 相关阅读:
    Python 集合
    Python sorted()
    CodeForces 508C Anya and Ghosts
    CodeForces 496B Secret Combination
    CodeForces 483B Friends and Presents
    CodeForces 490C Hacking Cypher
    CodeForces 483C Diverse Permutation
    CodeForces 478C Table Decorations
    CodeForces 454C Little Pony and Expected Maximum
    CodeForces 313C Ilya and Matrix
  • 原文地址:https://www.cnblogs.com/AKsnoopy/p/9056262.html
Copyright © 2011-2022 走看看