效果图
验证码:<input type="text" size="1" name="code"/><img src="VerifyServlet" width="80" height="40"/><a href="">看不清</a><br/>
VerifyServlet.java
package com.daohewang.servlet;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.*;
@WebServlet(name = "VerifyServlet", urlPatterns = "/VerifyServlet")
public class VerifyServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 创建一张图片
// 单位:像素
BufferedImage image = new BufferedImage(200, 100, BufferedImage.TYPE_3BYTE_BGR);
// 透明的玻璃
// 向画板上画内容之前必须先设置画笔
Graphics2D graphics2D = image.createGraphics();
graphics2D.setColor(Color.WHITE);
//从哪个坐标开始填充,后两个参数,矩形区域
graphics2D.fillRect(0, 0, 200, 100);
// 验证码数字生成
java.util.List<Integer> randList = new ArrayList<Integer>();
Random random = new Random();
for (int i = 0; i < 4; i++) {
randList.add(random.nextInt(10));
}
// 设置字体
graphics2D.setFont(new Font("宋体", Font.BOLD | Font.ITALIC, 40));
Color[] colors = new Color[]{Color.RED, Color.YELLOW, Color.PINK, Color.GREEN, Color.BLACK, Color.BLUE};
for (int i = 0; i < randList.size(); i++) {
graphics2D.setColor(colors[random.nextInt(colors.length)]);
graphics2D.drawString(randList.get(i) + "", i * 40, 70 + (random.nextInt(21) - 10));
}
// 设置横线
for (int i = 0; i < 2; i++) {
graphics2D.setColor(colors[random.nextInt(colors.length)]);
graphics2D.drawLine(0, random.nextInt(101), 200, random.nextInt(101));
}
ServletOutputStream outputStream = resp.getOutputStream();
// 工具类
ImageIO.write(image, "jpg", outputStream);
// 把验证码放入到session中
HttpSession session = req.getSession();
session.setAttribute("code",""+randList.get(0)+randList.get(1)+randList.get(2)+randList.get(3));
}
}