在Tomcat容器中,创建Servlet程序,实现5位随机验证码,验证码包含数字和字母,背景为灰色,字体为斜体。
时间:2023-05-26 19:07:19 浏览:41
以下是一个实现此功能的Servlet程序示例:
```
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
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 VerifyCodeServlet extends HttpServlet {
// 验证码图片的宽度和高度
private static final int WIDTH = 100;
private static final int HEIGHT = 30;
// 随机种子,用于生成验证码字符串
private static final String SEEDS = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 在内存中创建一张验证码图片
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
// 设置背景色
g.setColor(Color.GRAY);
g.fillRect(0, 0, WIDTH, HEIGHT);
// 生成随机字符串
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append(SEEDS.charAt(random.nextInt(SEEDS.length())));
}
// 将随机字符串作为验证码存入Session中
request.getSession().setAttribute("verifyCode", sb.toString());
// 绘制字符串
g.setColor(Color.BLACK);
g.setFont(new Font("Italic", Font.BOLD, 20));
for (int i = 0; i < 5; i++) {
g.drawString(String.valueOf(sb.charAt(i)), 20 + i * 20, 20);
}
// 发送验证码图片到浏览器
response.setContentType("image/jpeg");
ImageIO.write(image, "jpeg", response.getOutputStream());
}
}
```
在这个Servlet程序中,我们首先创建了一个内存中的图片,然后绘制了一个灰色的背景。接着,我们通过生成随机数来生成5位随机字符串,并将其作为验证码存入Session中。最后,我们将字符串绘制到验证码图片上,并将图片发送到浏览器中。
这样,每当用户访问此Servlet时,都会生成一个新的验证码,并将其存入Session中。当用户提交表单时,我们只需要将用户输入的验证码和Session中存储的验证码进行比较即可。如果相同,则说明验证码正确。