jsp写验证码
时间: 2023-10-21 11:05:16 浏览: 125
jsp的验证码
下面是一个简单的 JSP 页面生成验证码的示例:
```jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.awt.*, java.awt.image.*, java.util.*, javax.imageio.*, java.io.*" %>
<%
// 设置页面不缓存
response.setHeader("pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 定义图片的宽度和高度
int width = 100;
int height = 30;
// 创建一个 BufferedImage 对象,用于画验证码图片
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取 Graphics2D 对象
Graphics2D g = (Graphics2D) image.getGraphics();
// 设置背景颜色
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
// 定义可选的验证码字符
String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
// 随机生成 4 个字符作为验证码
Random rand = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
int index = rand.nextInt(chars.length());
char c = chars.charAt(index);
sb.append(c);
}
// 将生成的验证码保存到 Session 中
session.setAttribute("captcha", sb.toString());
// 绘制验证码
g.setColor(Color.BLACK);
Font font = new Font("Arial", Font.BOLD, 20);
g.setFont(font);
g.drawString(sb.toString(), 10, 22);
// 绘制干扰线条
for (int i = 0; i < 5; i++) {
int x1 = rand.nextInt(width);
int y1 = rand.nextInt(height);
int x2 = rand.nextInt(width);
int y2 = rand.nextInt(height);
g.setColor(Color.GRAY);
g.drawLine(x1, y1, x2, y2);
}
// 将生成的验证码图片输出到客户端
OutputStream os = response.getOutputStream();
ImageIO.write(image, "jpeg", os);
os.flush();
os.close();
%>
```
在 JSP 页面中,使用 `<img>` 标签引用上面生成的验证码图片:
```html
<img src="captcha.jsp" alt="验证码" />
```
当用户提交表单时,验证用户输入的验证码是否与 Session 中保存的一致即可。
阅读全文