一. 需求
- 访问带有验证码的登录页面 login.jsp。
- 用户输入用户名、密码、验证码。
- 如果用户名或密码输入错误,跳转至登录页面,提示:用户名或密码错误
- 如果验证码输入错误,跳转至登录页面,提示:验证码错误
- 如果全部输入正确,跳转至主页 success.jsp,显示:用户名,欢迎您!
二. 分析
三. 开发步骤
VerificationCodeServlet.java,参考:四. response Demo - 4. 验证码
package com.hjplz.servlet;
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;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
@WebServlet("/verificationCodeServlet")
public class VerificationCodeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int width = 100; // 验证码图片的宽度
int height = 50; // 验证码图片的高度
// 1. 创建一个对象,代表在内存中的验证码图片
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 2. 美化图片
// 2.1 填充背景色
Graphics g = image.getGraphics(); // 画笔对象
g.setColor(Color.PINK); // 设置画笔颜色
g.fillRect(0, 0, width, height);
// 2.2 画边框
g.setColor(Color.BLUE);
// 边框占 1 像素,所以宽高相应 - 1
g.drawRect(0, 0, width - 1, height - 1);
// 2.3 写验证码
StringBuilder sb = new StringBuilder();
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random ran = new Random();
// 随机生成四个验证码字符
for(int i = 1; i <= 4; i++) {
// 生成随机角标
int index = ran.nextInt(</