Java生成验证码,Ajax如何实现前端显示与交互?
- 后端开发
- 2025-10-31
- 6
在Java中生成验证码并通过Ajax显示到前端页面,通常需要后端生成验证码图片,然后将图片的URL发送到前端页面,前端通过Ajax请求获取URL,并在页面上显示验证码图片,以下是具体的实现步骤:

后端生成验证码
我们需要在Java后端生成验证码,以下是一个简单的示例,使用Java的java.awt和javax.imageio包来生成验证码图片。
import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CaptchaServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/png"); OutputStream outputStream = response.getOutputStream(); String captcha = generateCaptcha(); request.getSession().setAttribute("CAPTCHA", captcha); BufferedImage image = createImage(captcha); ImageIO.write(image, "png", outputStream); outputStream.close(); } private String generateCaptcha() { String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; StringBuilder sb = new StringBuilder(6); for (int i = 0; i < 6; i++) { int index = (int) (Math.random() * characters.length()); sb.append(characters.charAt(index)); } return sb.toString(); } private BufferedImage createImage(String captcha) { BufferedImage image = new BufferedImage(120, 40, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = image.createGraphics(); g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, 120, 40); g2d.setFont(new Font("Arial", Font.BOLD, 20)); g2d.setColor(Color.BLACK); for (int i = 0; i < captcha.length(); i++) { g2d.drawString(captcha.charAt(i) + "", 15 + i * 20, 30); } g2d.dispose(); return image; } }
前端显示验证码
在HTML页面中,我们可以使用Ajax请求后端生成的验证码图片,并显示在页面上。

FAQs
Q1: 为什么验证码图片每次刷新都会改变?

A1: 在后端生成验证码时,每次请求都会生成一个新的验证码字符串,并存储在用户会话中,验证码图片的URL后面会添加一个时间戳参数,这样每次请求都会获取到新的验证码图片。
Q2: 如何验证用户输入的验证码是否正确?
A2: 在前端提交表单时,可以通过Ajax请求将用户输入的验证码发送到后端,后端从用户会话中获取存储的验证码字符串,并将其与用户输入的验证码进行比较,如果两者匹配,则验证成功;否则,验证失败。