这里实现我使用到了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