import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
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 Captcha extends HttpServlet {
private static final int WIDTH = 70;
private static final int HEIGHT = 23;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 创建一个图像数据缓冲区
// BufferedImage.TYPE_INT_RGB ,表示一个具有八位RGB颜色的分量图像
Random random = new Random();
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics(); // 获取画笔工具
g.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255))); // 设置背景颜色
g.fillRect(0, 0, WIDTH, HEIGHT); // 设置画布尺寸
//生成验证码
StringBuilder s = new StringBuilder();
for (int i = 0; i < 5; i++) {
int num = random.nextInt(10);
char c = (char)(random.nextInt(25)+65);
String[] str = {String.valueOf(c),String.valueOf(num)};
s.append(str[random.nextInt(2)]);
}
g.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)));//设置验证码颜色
g.setFont(new Font(null,Font.ITALIC,20)); //设置字体
g.drawString(s.toString(), 20, 18);
//生成干扰线
for(int i=0;i<6;i++){
g.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)));
g.drawLine(random.nextInt(WIDTH), random.nextInt(HEIGHT), random.nextInt(WIDTH), random.nextInt(HEIGHT));
}
response.setContentType("image/jpeg");//表示输出的是图片,格式为JPEG
OutputStream os = response.getOutputStream();
ImageIO.write(image, "jpeg", os);
}
}
JSP添加A标签
<a href="javascript:;" οnclick="document.getElementById('image').src='image.do?'+Math.random()">看不清?换一张</a>验证码:<img src="image.do" id="image"/>
<servlet>
<servlet-name>captcha</servlet-name>
<servlet-class>captcha.Captcha</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>captcha</servlet-name>
<url-pattern>/image.do</url-pattern>
</servlet-mapping>