自定义工具类----JavaWeb生成验证码并使用

生成验证码

创建类VerifyCode用于生成验证码
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;

public class VerifyCode {
//	提供图片的宽、高数据
	private int w =70;
	private int h = 35;
//	创建随机对象
	private Random r = new Random();
//	手动确定使用字体、生成数据、的范围
	private String[] forName = {"宋体","华文楷体","黑体","微雅软黑","楷体_GB2312"};
	private String code= "23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
//	图片背景色
	private Color bgcolor = new Color(255, 255, 255);
//	最终生成的文本字符串
	private String text;
	
//	随机颜色方法
	private Color randomcolor(){
//		R,G,B取值为0-150,是为了别靠255(白色)太近,防止看不清
		int R = r.nextInt(150);
		int G = r.nextInt(150);
		int B = r.nextInt(150);
		return new Color(R, G, B);
	}
	
//	随机字体方法
	private Font randomfont(){
//		随机获取forname的一个下表,来得到相应字体
		int index = r.nextInt(forName.length);
//		第二个参数为字体样式   (0 五样式,1 粗体,2 斜体,3 粗体斜体)
//		第三个参数为字体大小
		return new Font(forName[index], r.nextInt(4), r.nextInt(4)+24);
	}
	
//	随机生成字符
	private char randomchar(){
		int index = r.nextInt(code.length());
//		从字符串中拿出第index个字符
		return code.charAt(index);
	}

//	生成验证码大白板
	private BufferedImage CreateImage(){
//  创建bufferedimage对象,设置图片的 长为w,宽为h,所创建图像的类型为TYPE_INT_RGB
		BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
//  拿到image对象的2D画笔
		Graphics2D g = (Graphics2D)bi.getGraphics();
//  设置图像背景色
		g.setColor(this.bgcolor);
//   用画笔填充图片,从(0,0)位置开始,长为w,宽为h,使用图形上下文的当前颜色填充该矩形。 
		g.fillRect(0, 0, w, h);
//  返回这张图片(纯背景图片)
		return bi;
	}
	
//	生成验正码
	public BufferedImage getImage(){
//  调用 CreateImage()函数,生成image(验证码图片)背景
		BufferedImage image = CreateImage();
//  2D画笔
		Graphics2D g2 = (Graphics2D)image.getGraphics();
		StringBuilder sb = new StringBuilder();
// 循环生成4个字符,添加到字符串sb 之后作为验证码
		for(int i=0;i<4;i++){
			String s = randomchar()+"";
			sb.append(s);
			//将图片四等分,每个新生成的字符画图时起点不同
			float x = i*1.0F*w/4;
			g2.setFont(randomfont());//随机字体
			g2.setColor(randomcolor());//随机颜色
			g2.drawString(s, x, h-5);//绘制字符在image上
		}
		this.text = sb.toString();//拿到完整的验证码字符串
		return image;//返回已生成验证码的图片
	}
	public String text (){
		return text;//返回验证码值
	}
//	保存图片方法
	public static void output(BufferedImage image,OutputStream out) throws IOException{
		ImageIO.write(image, "JPEG", out);
	}
}

在JavaWeb项目中具体使用验证码

Servlet

1.创建VerifyCode对象
2.创建BufferedImage对象,调用VerifyCode中的getImage方法,拿到生成的图片,以及验证码字符串text
3.将text存入session域中,以便在jsp端拿取
4.将图片保存至服务器端(response.getOutputStream())
代码:

package day11_02;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;

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 CodeServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			VerifyCode verifycode = new VerifyCode();
			BufferedImage image = verifycode.getImage();
			request.getSession().setAttribute("textcode", verifycode.text());
			VerifyCode.output(image, response.getOutputStream());
	}
}

JSP

1.form表单中创建验证码输入框
2.使用标签拿到Servlet生成的验证码,src地址为Servlet的路径
代码:

验证码:<input type="text" name="verifycode" size="3">
    	<br/>
 		<img id="imgs" src="/day11_02/CodeServlet" >

备注:请独立思考为验证码添加“换一张”功能、验证验证码是否正确功能。
如果有什么问题可以私聊博主为你解答哦!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值