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

Servlet方式实现验证码--Javaweb(升级版完整版),第1张

上一篇《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
    
结果如图:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/728396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存