J2EE之验证码实现

package cn.itcast.response;

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

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ResponseDemo5 extends HttpServlet {

	private int WIDTH = 120;
	private int HEIGHT = 25;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		BufferedImage image = new BufferedImage(WIDTH , HEIGHT , BufferedImage.TYPE_INT_RGB);
		Graphics graphics = image.getGraphics();
		
		//设置背景色
		setBackgroundColor(graphics);
		
		//设置边框
		setBorder(graphics);
		
		//绘制随机线
		drawRandomLine(graphics);
		
		//绘制随机数字
		drawRandomNum(graphics);
		response.setContentType("image/jpeg");
		ImageIO.write(image, "jpg", response.getOutputStream());
	}

	private void drawRandomNum(Graphics graphics) {
		// TODO Auto-generated method stub
		graphics.setColor(Color.RED);
		graphics.setFont(new Font("楷体", Font.BOLD, 20));
		String base="u96d5u864eu7684u4e00u4e86u662fu6211u4e0du5728u4ebau4eecu6709u6765u4ed6u8fd9u4e0au7740u4e2au5730u5230u5927u91ccu8bf4u5c31u53bbu5b50" +
				"u5f97u4e5fu548cu90a3u8981u4e0bu770bu5929u65f6u8fc7u51fau5c0fu4e48u8d77u4f60u90fdu628au597du8fd8u591au6ca1u4e3au53c8u53efu5bb6u5b66u53ea" +
				"u4ee5u4e3bu4f1au6837u5e74u60f3u751fu540cu8001u4e2du5341u4eceu81eau9762u524du5934u9053u5b83u540eu7136u8d70u5f88u50cfu89c1u4e24u7528u5979" +
				"u56fdu52a8u8fdbu6210u56deu4ec0u8fb9u4f5cu5bf9u5f00u800cu5df1u4e9bu73b0u5c71u6c11u5019u7ecfu53d1u5de5u5411u4e8bu547du7ed9u957fu6c34u51e0" +
				"u4e49u4e09u58f0u4e8eu9ad8u624bu77e5u7406u773cu5fd7u70b9u5fc3u6218u4e8cu95eeu4f46u8eabu65b9u5b9eu5403u505au53eb";
		int x = 10;
		for(int i = 0; i < 4; i++)
		{
			String str = base.charAt(new Random().nextInt(base.length())) + "";
			graphics.drawString(str, x, 21);
			x += 28;
		}
	}

	private void drawRandomLine(Graphics graphics) {
		// TODO Auto-generated method stub
		graphics.setColor(Color.GREEN);
		
		for(int i = 0; i < 5; i++)
		{
			int x1 = new Random().nextInt(WIDTH);
			int y1 = new Random().nextInt(HEIGHT);
			int x2 = new Random().nextInt(WIDTH);
			int y2 = new Random().nextInt(HEIGHT);
			
			graphics.setColor(Color.GREEN);
			graphics.drawLine(x1, y1, x2, y2);
		}
	}

	private void setBorder(Graphics graphics) {
		// TODO Auto-generated method stub
		graphics.setColor(Color.BLACK);
		graphics.drawRect(0, 0, WIDTH, HEIGHT);
	}

	private void setBackgroundColor(Graphics graphics) {
		// TODO Auto-generated method stub
		graphics.setColor(Color.WHITE);
		graphics.fillRect(0, 0, WIDTH - 1, HEIGHT - 1);
	}

}

原文地址:https://www.cnblogs.com/mengfanrong/p/4283764.html