Charlie

技术改变命运http://www.cnblogs.com/Charlie-Gou/ .NET高级编程群 群号 183773042 欢迎大神踊跃加入。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

java Servlet生成随机验证码

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

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

/**
 * Servlet implementation class ResponseDemo2
 */
@WebServlet("/ResponseDemo2")
public class ResponseDemo2 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	private static int imageHeight = 50;
	private static int imageWidth = 110;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public ResponseDemo2() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		BufferedImage bufferImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
		Graphics g = bufferImage.createGraphics();

		// 1.设置背景色
		SetBackGroundColor(g);
		// 2.设置边框
		SetBorder(g);
		// 3.画干扰线
		DrawRandomLine(g);
		// 4.写随机数
		DrawRandomNum((Graphics2D) g);
		// 输出给浏览器
		response.setContentType("image/jpeg");
		ImageIO.write(bufferImage, "jpg", response.getOutputStream());
	}

	private void DrawRandomNum(Graphics2D g) {
		// TODO Auto-generated method stub
		g.setColor(Color.RED);
		g.setFont(new Font("宋体", Font.PLAIN, 40));
		String baseString = "1234567890";
		for (int i = 0; i < 4; i++) {
			int x = 5 + i * 25;

			double degree = (new Random().nextInt()%30) * Math.PI / 180;
			g.rotate(degree, x, 25);
			g.drawString(baseString.charAt(new Random().nextInt(baseString.length())) + "", x, 40);
			g.rotate(-degree, x, 25);
		}
	}

	private void DrawRandomLine(Graphics g) {
		// TODO Auto-generated method stub
		g.setColor(Color.RED);
		for (int i = 0; i < 20; i++) {
			int x1 = new Random().nextInt(imageWidth);
			int y1 = new Random().nextInt(imageHeight);
			int x2 = new Random().nextInt(imageWidth);
			int y2 = new Random().nextInt(imageHeight);
			g.drawLine(x1, y1, x2, y2);
		}
	}

	private void SetBorder(Graphics g) {
		// TODO Auto-generated method stub
		g.setColor(Color.BLUE);
		g.drawRect(1, 1, imageWidth - 2, imageHeight - 2);
	}

	private void SetBackGroundColor(Graphics g) {
		// TODO Auto-generated method stub
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, imageWidth, imageHeight);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

  

posted on 2018-03-22 15:32  Charlie.Gou  阅读(298)  评论(0)    收藏  举报