Servlet方式实现验证码--Javaweb(升级版/完整版)

发布时间:2024-07-14 11:01

上一篇《Servlet方式实现验证码--Javaweb》使用servlet实现的验证码点击刷新,现在我们要对验证码输入进行判断,是对上一篇博客的补充。

目录

实现验证码输入判断

代码如下

CodeServlrt:

CodeUtil:

code.jsp:

codejy.jsp:

部署web.xml

结果如图:


实现验证码输入判断

如果输入正确,页面输出 输入的验证码正确!

如果输入错误,页面输出 输入的验证码错误!

代码如下

CodeServlrt:

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author Sun
 * @version 2021.2
 * @date 2022/4/24 18:23
 */
public class CodeServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 设置请求的编码
        request.setCharacterEncoding(\"UTF-8\");
        // 设置响应的编码
        response.setContentType(\"text/html;charset=UTF-8\");
        // 获取验证码
        String scode = CodeUtil.getCode();
        // 将验证码保存到session中,便于以后验证码
        request.getSession().setAttribute(\"scode\", scode);
        // 发送图片
        ImageIO.write(CodeUtil.getCodeImg(scode), \"JPEG\", response.getOutputStream());
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doPost(req, resp);
    }
}

CodeUtil:

/**
 * @author Sun
 * @version 2021.2
 * @date 2022/4/24 18:25
 */

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;

/**
 * 验证码
 *
 * @author lck100
 */
public class CodeUtil {
    // 验证码长度
    private static int CODE_LENGTH = 5;
    // 单个验证码的宽度
    private static int SINGLECODE_WIDTH = 15;
    // 单个验证码的高度
    private static int SINGLECODE_HEIGHT = 30;
    // 单个验证码之间的间隔
    private static int SINGLECODE_GAP = 5;
    // 验证码图片的宽度
    private static int IMG_WIDTH = CODE_LENGTH * (SINGLECODE_WIDTH + SINGLECODE_GAP);
    // 验证码图片的长度
    private static int IMG_HEIGHT = SINGLECODE_HEIGHT;

    /**
     * 获取验证码
     *
     * @return 返回验证码值字符串
     */
    public static String getCode() {
        String code = \"\";
        for (int i = 0; i < CODE_LENGTH; i++) {
            code += (new Random()).nextInt(10);
        }
        return code;
    }

    /**
     * 画一张验证码图片
     *
     * @return 返回一张验证码图片
     */
    public static BufferedImage getCodeImg(String code) {
        BufferedImage img = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_BGR);
        // 得到图片上的一个画笔
        Graphics g = img.getGraphics();
        // 设置画笔的颜色,用来做背景色
        g.setColor(Color.YELLOW);
        // 用画笔填充一个矩形,矩形的左上角坐标,宽和高
        g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT);
        // 将画笔颜色设置为黑色,用来写字
        g.setColor(Color.BLACK);
        // 设置字体:微软雅黑、不带格式的、字号
        g.setFont(new Font(\"微软雅黑\", Font.PLAIN, SINGLECODE_HEIGHT + 5));
        // 输出数字
        char c;
        for (int i = 0; i < code.toCharArray().length; i++) {
            // 取到对应位置的字符
            c = code.charAt(i);
            // 画出一个字符串:要画的内容,开始的位置,高度
            g.drawString(c + \"\", i * (SINGLECODE_WIDTH + SINGLECODE_GAP) + SINGLECODE_GAP / 2, IMG_HEIGHT);
        }
        // 实例化一个随机数对象
        Random random = new Random();
        // 干扰因素
        for (int i = 0; i < 20; i++) {
            int x = random.nextInt(IMG_WIDTH);
            int y = random.nextInt(IMG_HEIGHT);
            int x2 = random.nextInt(IMG_WIDTH);
            int y2 = random.nextInt(IMG_HEIGHT);
            // 画干扰线
            g.drawLine(x, y, x + x2, y + y2);
        }
        return img;
    }
}

code.jsp:

<%--
  Created by IntelliJ IDEA.
  User: 86130
  Date: 2022/4/24
  Time: 18:26
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>


    
    验证码
    


看不清

codejy.jsp:

<%--
  Created by IntelliJ IDEA.
  User: 86130
  Date: 2022/4/24
  Time: 18:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>


  验证结果


<%
  // 获取后台的验证码
  String scode = (String) session.getAttribute(\"scode\");
  // 获取前台输入的验证码
  String ucode = request.getParameter(\"ucode\");
  // 对二者进行比较对比
  if (scode.equals(ucode)) { %>

输入的验证码正确!

<% } else { %>

输入的验证码错误!

<% } %>

部署web.xml



    
    
        code.jsp
    
    
    
        CodeServlet
        CodeServlet
    
    
        CodeServlet
        /codeServlet
    

结果如图:

\"\"

\"\"

\"\"

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号