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)) {//满足即输入验证码正确
    。。。。
    }
  • 相关阅读:
    使用 CSS 强制内容不换行
    奇怪的 Object reference not set to an instance of an object
    (String) 和 String.valueOf() 两种字符串转换的区别
    SQL 里面的 UNION 说明
    Flex/AIR 中 Embed 标签的使用
    把 doc、xls、pdf 转换为 swf 的相关工具
    把指定的站点加到 IE 可信站点中
    在 VS 中快速打开文件或类型
    linux配置网卡
    linux配置本地源
  • 原文地址:https://www.cnblogs.com/AKsnoopy/p/9056262.html
Copyright © 2011-2022 走看看