在Tomcat容器中,创建Servlet程序,实现5位随机验证码,验证码包含数字和字母,背景为灰色,字体为斜体。
时间: 2023-05-29 18:04:09 浏览: 48
以下是一个实现5位随机验证码的Servlet程序,具有上述要求的样式:
```java
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.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/captcha")
public class CaptchaServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final int WIDTH = 100; // 验证码图片宽度
private static final int HEIGHT = 50; // 验证码图片高度
private static final int CODE_LEN = 5; // 验证码长度
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置响应头,告诉浏览器返回的是图片
response.setContentType("image/jpeg");
// 创建验证码图片
BufferedImage captchaImage = createCaptchaImage();
// 将验证码保存到Session中
request.getSession().setAttribute("captcha", getCaptchaCode());
// 将验证码图片发送给浏览器
ImageIO.write(captchaImage, "jpeg", response.getOutputStream());
}
private BufferedImage createCaptchaImage() {
BufferedImage captchaImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics graphics = captchaImage.getGraphics();
// 设置背景为灰色
graphics.setColor(Color.GRAY);
graphics.fillRect(0, 0, WIDTH, HEIGHT);
// 设置字体为斜体
graphics.setFont(new Font("Arial", Font.ITALIC, 20));
// 生成随机验证码并绘制到图片上
String captchaCode = getCaptchaCode();
graphics.setColor(Color.WHITE);
graphics.drawString(captchaCode, 20, 30);
// 绘制随机干扰线
Random random = new Random();
for (int i = 0; i < 5; i++) {
int x1 = random.nextInt(WIDTH);
int y1 = random.nextInt(HEIGHT);
int x2 = random.nextInt(WIDTH);
int y2 = random.nextInt(HEIGHT);
graphics.setColor(Color.WHITE);
graphics.drawLine(x1, y1, x2, y2);
}
return captchaImage;
}
private String getCaptchaCode() {
String captchaCode = "";
Random random = new Random();
for (int i = 0; i < CODE_LEN; i++) {
int type = random.nextInt(3); // 0:数字,1:小写字母,2:大写字母
char ch;
if (type == 0) {
ch = (char) ('0' + random.nextInt(10));
} else if (type == 1) {
ch = (char) ('a' + random.nextInt(26));
} else {
ch = (char) ('A' + random.nextInt(26));
}
captchaCode += ch;
}
return captchaCode;
}
}
```
在部署好这个Servlet程序后,访问`/captcha`即可获得一个5位随机验证码的图片,同时该验证码会被保存到Session中,方便之后进行验证。