通过这个servlet生成验证码图片,并将验证码以字符串的形式存入SelectSession!!
/**
* 负责生成验证码图片,并将验证码字符串信息存入到session中
* @author 蔡俊伟
*
*/
public class ValidCodeServlet extends HttpServlet{
@Override
public void service(HttpServletRequest request,HttpServletResponse response) throws IOException {
//获取一张图片
BufferedImage image = new BufferedImage(200,100,BufferedImage.TYPE_INT_RGB);
//生成一个画笔
Graphics2D graphics = image.createGraphics();
//设置画笔的颜色
graphics.setColor(Color.WHITE);
//填充一个矩形空间
graphics.fillRect(0, 0, 200, 100);
Random random = new Random();
//生成一个0到9的随机数集合
List<Integer> validCodeList = new ArrayList<Integer>();
for(int i=0;i<4;i++) {
validCodeList.add(random.nextInt(10));
}
//生成一个随机颜色集合
List<Color> colorList = new ArrayList<Color>();
colorList.add(Color.BLACK);
colorList.add(Color.BLUE);
colorList.add(Color.GREEN);
colorList.add(Color.RED);
colorList.add(Color.YELLOW);
//设置字体
graphics.setFont(new Font("font",Font.BOLD|Font.PLAIN,40));
//在image图片中写入数字
for(int i=0;i<validCodeList.size();i++) {
//在颜色集合中随便获取一个颜色
graphics.setColor(colorList.get(random.nextInt(colorList.size())));
//写入数字
graphics.drawString(validCodeList.get(i)+"",i*40+5, 70+random.nextInt(31)-10);
}
//画两条横线
for(int i=0;i<3;i++) {
graphics.setColor(colorList.get(random.nextInt(colorList.size())));
graphics.drawLine(0, 50+random.nextInt(30), 200, 50+random.nextInt(30));
}
//将四个验证码以字符串存入session
request.getSession().setAttribute("validCode",""+validCodeList.get(0)+validCodeList.get(1)+validCodeList.get(2)+validCodeList.get(3));
//将验证码图片响应给浏览器
ServletOutputStream outputStream = response.getOutputStream();
ImageIO.write(image, "jpg", outputStream);
}
}