iava web算术验证码完整代码
时间: 2023-09-12 11:03:23 浏览: 79
以下是一个简单的 Java Web 算术验证码实现的完整代码:
1. 首先在 JSP 页面中添加以下代码:
```html
<form action="checkcode" method="post">
<label>请输入验证码:</label>
<input type="text" name="code" />
<img src="code" onclick="this.src='code?'+Math.random()" />
<input type="submit" value="提交" />
</form>
```
2. 创建一个 Servlet 类来生成验证码和验证用户输入的验证码,代码如下:
```java
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class CheckCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 验证码图片的宽度
private int width = 90;
// 验证码图片的高度
private int height = 30;
// 验证码字符个数
private int codeCount = 4;
// 验证码干扰线数
private int lineCount = 20;
// 验证码字符集合
private String codeChars = "0123456789";
// 验证码图片Buffer
private BufferedImage buffImg = null;
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 定义图像buffer
buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
// 创建一个随机数生成器类
Random random = new Random();
// 设置背景色
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
// 创建字体,字体的大小应该根据图片的高度来定。
Font font = new Font("Times New Roman", Font.PLAIN, 20);
// 设置字体。
g.setFont(font);
// 画边框。
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
// 随机产生干扰线
g.setColor(Color.BLACK);
for (int i = 0; i < lineCount; i++) {
int x1 = random.nextInt(width);
int y1 = random.nextInt(height);
int x2 = random.nextInt(10) + x1;
int y2 = random.nextInt(10) + y1;
g.drawLine(x1, y1, x2, y2);
}
// 随机产生验证码字符
String code = "";
for (int i = 0; i < codeCount; i++) {
// 得到随机产生的验证码数字。
String str = String.valueOf(codeChars.charAt(random.nextInt(codeChars.length())));
// 画出验证码。
g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
g.drawString(str, 20 * i + 6, 25);
code += str;
}
// 将验证码保存到Session中。
HttpSession session = request.getSession();
session.setAttribute("code", code);
// 禁止图像缓存。
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 将图像输出到Servlet输出流中。
response.setContentType("image/jpeg");
OutputStream out = response.getOutputStream();
ImageIO.write(buffImg, "jpeg", out);
out.close();
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
```
3. 创建一个 Servlet 类来验证用户输入的验证码,代码如下:
```java
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class CheckCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取用户输入的验证码。
String code = request.getParameter("code");
// 获取Session中保存的验证码。
HttpSession session = request.getSession();
String sessionCode = (String) session.getAttribute("code");
// 比较用户输入的验证码和Session中保存的验证码是否一致。
if (code.equalsIgnoreCase(sessionCode)) {
// 验证码正确。
response.getWriter().write("验证码正确!");
} else {
// 验证码错误。
response.getWriter().write("验证码错误!");
}
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
}
```
以上就是一个简单的 Java Web 算术验证码实现的完整代码。
阅读全文