Servlet中的简单数字验证码

一. 简单的四个数字验证码:

package com.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//映射路径
@WebServlet("/validcode")
public class ValidCodeServlet extends HttpServlet {       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    
        //准备画布
        BufferedImage image = new BufferedImage(200, 100, BufferedImage.TYPE_INT_RGB);
        //准备画笔
        Graphics g = image.getGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, 200, 100);
        //要放入数字的集合
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        for(int i=0; i<4; i++){
            //放入四个随机数到集合
            list.add(random.nextInt(10));
        }
        g.setFont(new Font("宋体", Font.ITALIC|Font.BOLD, 40));
        //要放入颜色的数组,方便设置随机颜色
        Color[] colors = new Color[]{Color.RED,Color.YELLOW,Color.BLUE,Color.GREEN,Color.GRAY,Color.BLACK,Color.PINK};
        for(int i=0; i<list.size(); i++){
            g.setColor(colors[random.nextInt(colors.length)]);
            //把数字画进去
            g.drawString(list.get(i)+"", i*40, 50+(random.nextInt(21)-10));
        }
        for(int i=0; i<3; i++){
            //画干扰线
            g.drawLine(0, random.nextInt(101), 200, random.nextInt(101));
        }
        //输出流
        ServletOutputStream os = response.getOutputStream();
        //输出图象到页面.将图像以jpg格式放入到输出流中输出
        ImageIO.write(image, "jpg", os);
        HttpSession session = request.getSession();
        //将验证码放入session会话中,方便与用户输入的验证码做对比
        session.setAttribute("code", ""+list.get(0)+list.get(1)+list.get(2)+list.get(3));        
    }
}

二. 效果如下:

猜你喜欢

转载自blog.csdn.net/luxin120/article/details/89304706