//生成数字和字母组合的验证码
public class ResponseDemo3 extends HttpServlet {
private static final long serialVersionUID =1L;
private int WIDTH=140;
private int HEIGHT=35;
public void doGet(HttpServletRequest request,HttpServletResponse response)
throwsServletException, IOException {
BufferedImage image=newBufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphicsg=image.getGraphics();
//1、设置背景色
setBackGround(g);
//2、设置边框
serBorder(g);
//3、画干扰线
drawRandomLine(g);
//4、写随机数
drawRandomNum((Graphics2D)g);
//禁止图像缓存。
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
//5、图形写给浏览器
response.setContentType("text/jpeg");
ImageIO.write(image, "jpg",response.getOutputStream());
}
private void setBackGround(Graphics g) {
g.setColor(getRandColor(190,230));
g.fillRect(0, 0, WIDTH,HEIGHT);
}
private void serBorder(Graphics g) {
g.setColor(Color.BLACK);
g.drawRect(1, 1, WIDTH-2,HEIGHT-2);
}
private void drawRandomLine(Graphics g) {
g.setColor(Color.GRAY);
for(inti=0;i<4;i++){
int x1=newRandom().nextInt(WIDTH);
int y1=newRandom().nextInt(HEIGHT);
int x2=newRandom().nextInt(WIDTH);
int y2=newRandom().nextInt(HEIGHT);
g.drawLine(x1,y1, x2, y2);
}
}
private void drawRandomNum(Graphics2D g){
g.setColor(getRandColor(20,80));
//设置字体的大小
g.setFont(newFont("宋体",Font.BOLD,30));
Stringbase="abcdefghijklmnopqrstuvwxyz0123456789";
int x=10;
for(inti=0;i<6;i++){
intdegree=new Random().nextInt()0;//角度范围在-30-30
Stringch=base.charAt(new Random().nextInt(base.length()))+"";
//设置旋转角度
g.rotate(degree*Math.PI/180,x,20);
g.drawString(ch,x, 25);
//每次旋转完后再把角度设置成原来的
g.rotate(-degree*Math.PI/180,x,20);
x+=20;
}
}
//给定范围获得随机颜色
Color getRandColor(int fc, int bc){
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throwsServletException, IOException {
doGet(request,response);
}
}