首页>代码>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日
最近浏览更多
asddwh  LV12 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日
2890440805  LV3 2022年8月4日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友