首页>代码>java web开发简单实用的图片验证码功能>/One/src/com/jy/servlet/CheckCodeServlet.java
package com.jy.servlet;
/*
 * 时间:2018-08-08
 * 作者:黄奇
 * */
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class CheckCodeServlet extends HttpServlet{
	private static final long serialVersionUID = 8597644014366031304L;

	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*
		 * 绘图
		 */
		//1.创建一个内存映像对象(画布)。
		BufferedImage image = 
			new BufferedImage(80,30,
					BufferedImage.TYPE_INT_RGB);
		//2.获得画笔
		Graphics g = image.getGraphics();
		//3.给画笔上色
		Random r = new Random();
		g.setColor(new Color(r.nextInt(255),
				r.nextInt(255),r.nextInt(255)));
		//4.开始绘图
		//4.1给画布设置背景颜色 
		g.fillRect(0, 0, 80, 30);
		//4.2给画笔设置一个颜色
		g.setColor(new Color(0,0,0));
		g.setFont(new Font(null,Font.ITALIC,20));
		//4.3在画布上绘图
		//A~Z,0~9随机选取5位
		String number = getNumber(5);
		//将验证码(number)绑订到session对象上
		HttpSession session = request.getSession();
		session.setAttribute("number", number);
		g.drawString(number, 5, 20);
		//4.4加上一些干扰线
		for(int i=0;i<8;i++){
			g.drawLine(r.nextInt(80),
					r.nextInt(30), 
					r.nextInt(80), 
					r.nextInt(30));
		}
		/*
		 * 将图片压缩并输出  
		 */
		//1.设置content-type消息头,告诉浏览器
		//返回的是一个jpeg格式的图片
		response.setContentType("image/jpeg");
		//2.获得一个字节输出流(因为是图片)
		OutputStream ops = 
			response.getOutputStream();
		//3.将图片压缩并输出
		javax.imageio.ImageIO
		.write(image, "jpeg", ops);
		ops.close();
		
	}
	
	/*
	 * 返回指定长度的一个字符串
	 * (由A~Z,0~9中选取)
	 */
	private String getNumber(int size) {
		String number = "";
		String chars = "ABCDEFGHI" +
				"JKLMNOPQRSTUVWXYZ01234" +
				"56789";
		Random r = new Random();
		for(int i=0;i<size;i++){
			number += chars.charAt(
					r.nextInt(chars.length()));
		}
		return number;
	}

}

最近下载更多
846488283  LV4 2023年5月28日
lvhongquan  LV11 2022年5月22日
JohnAlex  LV9 2022年2月22日
gezellig  LV6 2021年10月21日
messi_Liu  LV1 2019年12月4日
qq348438222  LV1 2019年10月18日
qianxinyue  LV1 2019年7月5日
李七七  LV1 2019年7月2日
嘎嘎嘎01  LV1 2019年6月25日
ldd5333333  LV4 2019年6月16日
最近浏览更多
xiao1111  LV3 6月18日
asddwh  LV13 2023年12月26日
zj20020510  LV5 2023年9月18日
936684178  LV2 2023年6月26日
Merdan_810 2023年6月9日
暂无贡献等级
846488283  LV4 2023年5月28日
Akail003 2023年4月6日
暂无贡献等级
cyn123456 2023年2月13日
暂无贡献等级
3174233007 2022年12月19日
暂无贡献等级
与哲rhcy  LV6 2022年12月4日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友