一. 简单的四个数字验证码:
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));
}
}
二. 效果如下: