如何生成验证码图片?

通过这个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);
    } 
}

 

 

posted @ 2018-11-20 20:53  caiJava  阅读(693)  评论(0编辑  收藏  举报