jsp生成验证码的代码

效果图:


loginProcess.jsp

java 复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <% String captcha=request.getParameter("captcha");%>
    <% String captcha_session=(String)session.getAttribute("captchaCode");%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
     if (captcha.equals(captcha_session))
    	 out.print("验证码正确~!");
     else
    	 out.print("验证码不正确~!");
%>
</body>
</html>
java 复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录页面之验证码原理</title>
    <script>
        // JavaScript code to refresh captcha every 30 seconds
        function refreshCaptcha() {
            var img = document.getElementById("captchaImg");
            img.src = "./abc?" + new Date().getTime(); // add timestamp to force reload
        }
        setInterval(refreshCaptcha, 30000); // refresh captcha every 30 seconds
    </script>
</head>
<body>
    <h1>登录页面之验证码原理</h1>
    <form action="loginProcess.jsp" method="post">
        <div>
            <label for="username">姓名:</label>
            <input type="text" id="username" name="username">
        </div>
        <div>
            <label for="password">密码:</label>
            <input type="password" id="password" name="password">
        </div>
        <div>
            <label for="captcha">验证码:</label>
            <input type="text" id="captcha" name="captcha">
            <img id="captchaImg" width=100 src="./abc" alt="Captcha Image" onclick="refreshCaptcha()">
            <button type="button" onclick="refreshCaptcha()">刷新验证码</button>
        </div>
        <div>
            <button type="submit">登录</button>
        </div>
    </form>
</body>
</html>
java 复制代码
package src;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Base64;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/abc")
public class GenerateCaptchaServlet extends HttpServlet {
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Set content type of the response
        response.setContentType("image/jpeg");

        // Create a random captcha code
        String captchaCode = generateRandomCode(6); // Generate 6-character random code
        // Store the captcha code in session for validation
        request.getSession().setAttribute("captchaCode", captchaCode);

        // Create a BufferedImage for captcha image
        int width = 200;
        int height = 50;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = image.createGraphics();

        // Draw the captcha code on the image
        g2d.setFont(new Font("Arial", Font.BOLD, 24));
        g2d.setColor(Color.RED);
        g2d.drawString(captchaCode, 50, 30);

        // Dispose the graphics
        g2d.dispose();

        // Output the image as JPEG to the client
        OutputStream out = response.getOutputStream();
        ImageIO.write(image, "jpeg", out);
        out.close();
    }

    private String generateRandomCode(int length) {
        String charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        Random random = new Random();
        StringBuilder sb = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            int index = random.nextInt(charset.length());
            sb.append(charset.charAt(index));
        }
        return sb.toString();
    }
}
相关推荐
泡海椒13 分钟前
告别 iText 繁杂配置:jquick-pdf 极简 PDF 生成实战(零基础上手)
java·开发语言·pdf
Bs_MoneyMagnet3 小时前
基于springboot+vue的滑雪场票务与装备租赁系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
野生技术架构师9 小时前
2026 Java 面试全套总结,八股 + 场景 + AI 相关面试考点
java·人工智能·面试
香吧香9 小时前
java服务异常日志只打印异常类型,没有堆栈定位分析
java·jvm·异常
qq_25183645710 小时前
AI 疾病自查功能SpringbootAI项目实战 · 技术实现文档
java·ai·ai编程
逆境不可逃10 小时前
Pi Agent 学习笔记:对话太长以后,如何压缩上下文
java
MetaLite10 小时前
JDK 8~26 核心特性一览:从 Stream 到 Scoped Values
java
wno70411 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
君顾111 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房
香菜TTT12 小时前
大模型上下文协议(MCP):AI 应用的“USB-C”接口技术
开发语言·人工智能·经验分享