jsp页面简单的验证码实现

时间:2021-12-16 17:10:05

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

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

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

jsp页面简单的验证码实现

直接上代码

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

1 <input type="text" id="checkCode"name="checkCode" style="width: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)) {//满足即输入验证码正确
。。。。
}