生成验证码
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
@WebServlet("/ValidateCodeServlet")
public class ValidateCodeServlet extends HttpServlet {
Random random=new Random();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//验证码宽度(像素)
int width=240;
//验证码高度
int height=80;
//图片对象
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获得画笔
Graphics pen= bufferedImage.createGraphics();
//给画笔颜色
pen.setColor(getColor());
pen.fillRect(0,0,width,height);
//生成干扰线
for(int i=0;i<20;i++){
pen.setColor(getColor());
pen.drawLine(random.nextInt(width+1),random.nextInt(height),random.nextInt(width+1),random.nextInt(height));
}
//绘制字符串
int letterNum=4;
int space=15;
int letterWidth=(width-(letterNum+1)*space)/letterNum;
String code="";
for (int i=0;i<letterNum;i++){
int ascii=random.nextInt(26)+97;
byte[] bytes = new byte[1];
bytes[0]=(byte) ascii;
String letter = new String(bytes);
pen.setColor(getColor());
pen.setFont(new Font("Gulim",Font.BOLD,72));
pen.drawString(letter,space+(letterWidth+space)*i,height-15);
code=code+letter;
}
request.getSession().setAttribute("code",code);
//输出流相应验证码
ImageIO.write(bufferedImage,"png",response.getOutputStream());
}
private Color getColor(){
int r= random.nextInt(256);
int g= random.nextInt(256);
int b= random.nextInt(256);
return new Color(r,g,b);
}
}
在需要验证验证码的servlet中
//获得验证码
request.getSession().getAttribute("code");