javaweb中的验证码实现

javaweb中的验证码实现

验证码现在在网络中发挥的作用非常大。本文主要介绍如何使用Servlet中制作一个验证码。
代码实例:
<span style="font-size:18px;">package com.zhong.servlet;

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

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

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImageServlet extends HttpServlet {
	
	//字典,验证码中的字符从这里取出。
	private static final char[] CHARS={'2','3','4','5','6','7','8','9','A','B','C','D','E','F',
		'G','H','I','J','K','L','M','N','O','P','Q','R','S','T'};
	
	//一个随机数生成器
	private static Random random=new Random();
	
	/**
	 * 获得一个随机字符串
	 * @return
	 */
	public static String getRandomString(){
		StringBuilder sb=new StringBuilder();
		for(int i=0;i<6;i++){
			sb.append(CHARS[random.nextInt(CHARS.length)]);
		}
		return sb.toString();
	}
	
	/**
	 * 获得一个随机的颜色值
	 * @return
	 */
	public static Color getRandomColor(){
		return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
	}
	
	public static Color getReverseColor(Color c){
		return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue());
	}

	public ImageServlet() {
		super();
	}

	public void destroy() {
		super.destroy(); 
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("image/jpeg");
		String randomString=getRandomString();
		request.getSession(true).setAttribute("randomString", randomString);
		
		int width=100;int height=30;
		
		Color color=getRandomColor();
		Color reverseColor=getReverseColor(color);
		
		BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
		
		//创建图像
		Graphics2D g=bi.createGraphics();
		
		g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));
		g.setColor(color);
		g.fillRect(0, 0, width, height);
		g.setColor(reverseColor);
		g.drawString(randomString, 18, 20);
		for(int i=0,n=random.nextInt(100);i<n;i++){
			g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
		}
		
		ServletOutputStream sout=response.getOutputStream();
		JPEGImageEncoder endocer=JPEGCodec.createJPEGEncoder(sout);
		endocer.encode(bi);
		sout.flush();

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

		response.setContentType("image/jpeg");
		String randomString=getRandomString();
		request.getSession(true).setAttribute("randomString", randomString);
		
		int width=100;int height=30;
		
		Color color=getRandomColor();
		Color reverseColor=getReverseColor(color);
		
		BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
		
		Graphics2D g=bi.createGraphics();
		
		g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));
		g.setColor(color);
		g.fillRect(0, 0, width, height);
		g.setColor(reverseColor);
		g.drawString(randomString, 18, 20);
		for(int i=0,n=random.nextInt(100);i<n;i++){
			g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
		}
		
		ServletOutputStream sout=response.getOutputStream();
		JPEGImageEncoder endocer=JPEGCodec.createJPEGEncoder(sout);
		endocer.encode(bi);
		sout.flush();
	}

	public void init() throws ServletException {
		// Put your code here
	}

}
</span>
效果图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值