Java实现验证码(一)

2014-11-24 07:53:44 · 作者: · 浏览: 2

这里实现我使用到了struts2模拟一个登录功能来验证java实现的验证码功能。

Java实现验证码的步骤:

1、创建RandomImageGenerator.java类,该类实现验证码图片的生成

2、创建一个servlet类,RandomImageServlet.java,将生成的验证码输出到页面

3、创建一个Action类,LoginAction.java,控制登录

4、配置struts.xml一个web.xml文件

5、编写页面

具体实现用代码表达

1、创建RandomImageGenerator.java类

package com.tenghu.code;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;

/**
 * 验证码生成类
 * @author xiaohu
 *
 */
public class RandomImageGenerator {
	//创建Random对象
	static Random random=new Random();
	//随机生成包含验证码字符串
	public static String random(int num){
		//初始化种子
		String[] str={"0","1","2","3","4","5","6","7","8","9",
					  "a","b","c","d","e","f","g","h","i","j",
					  "k","l","m","n","p","q","r","s","t"};
		int number=str.length;
		//接收随机字符
		String text = "";
		//随机产生4个字符的字符串
		for(int i=0;i
  

   

2、创建RandomImageServlet.java

package com.tenghu.code.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tenghu.code.RandomImageGenerator;

public class RandomImageServlet extends HttpServlet {
	//图片宽度
	int width=0;
	//图片高度
	int height=0;
	//图片上随机字符个数
	int randomStrNum=0;
	public void destroy() {
	}
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		//获取HttpSession对象
		HttpSession session=request.getSession();
		//获取随机字符串
		String randomStr=RandomImageGenerator.random(randomStrNum);
		if(null!=session){
			//设置参数
			session.setAttribute("randomStr", randomStr);
			//设置响应类型
			response.setContentType("image/jpeg");
			//输出到页面
			RandomImageGenerator.render(randomStr, response.getOutputStream(), width, height);
		}
	}
	public void init() throws ServletException {
		//获取宽度
		width=Integer.parseInt(this.getInitParameter("width"));
		//获取高度
		height=Integer.parseInt(this.getInitParameter("height"));
		//获取个数
		randomStrNum=Integer.parseInt(this.getInitParameter("num"));
	}
}


3、创建LoginAction.java类

package com.tenghu.code.action;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{
	//用户名
	private String userName;
	//密码
	private String password;
	//验证码
	private String code;
	private InputStream inputStream;
	public InputStream getResult(){
		return inputStream;
	}
	//成功
	public String success() throws Exception{
		return SUCCESS;
	}
	//测试登录
	public String testLogin() throws Exception{
		//获取图片的验证码
		String randomStr=(String) ActionContext.getContext().getSes