您的位置:首页 > 编程语言 > Java开发

struts2生成验证码

2016-07-26 18:41 471 查看

action

package demo.action;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;

//一个产生验证码的类
public class IdCode implements Action{

private ByteArrayInputStream input;
public ByteArrayInputStream getInput() {
return input;
}
public void setInput(ByteArrayInputStream input) {
this.input = input;
}

//限定验证码的长度
private int codeLength = 4;
//限定验证码产生的范围
private String[] str = new String[]{"a","b","c","d","e","f","g","h","i","j"};
//产生随机数
private Random random = new Random();
//验证码中字体大小
private int fontSize = 20;
//字体样式
private String fontName = "黑体";
//字体风格
private int fontStyle = Font.BOLD;
//验证码图片的宽度
private int width = (fontSize+4)*codeLength;
//图片的高度
private int height = fontSize+6;
//图片的类型
private int imgtTpe = BufferedImage.TYPE_INT_BGR;
//噪点的数量
private int sound = 50;
//产生一个限定的字符集中的字符
private String getOneCode(){
int i = random.nextInt(str.length);
return str[i];
}
//产生一个验证码字符串
private String[] createCode(){
String[] validateCode = new  String[codeLength];
for (int j = 0; j < codeLength; j++) {
validateCode[j] = getOneCode();
}
return validateCode;
}

private BufferedImage createImage(String[] validateCode){

//创建画布
BufferedImage bi = new BufferedImage(width, height,imgtTpe);
//获取画笔
Graphics g = bi.getGraphics();

//绘制背景
g.setColor(Color.white);
g.fillRect(0, 0, width, height);

//绘制边框
g.setColor(Color.black);
g.drawRect(0, 0, width-1, height-1);

//绘制噪点
for(int i = 0 ; i<sound ; i++){
g.setColor(new Color(random.nextInt(255)));
g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
}
//绘制验证码
Font font = new Font(fontName, fontStyle, fontSize);
g.setFont(font);
for(int i = 0 ;i<codeLength;i++){
g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
g.drawString(validateCode[i], 10+fontSize*i, fontSize);
}
g.dispose();
return bi;
}
public void createInputStream(String[] validateCode){
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
boolean a = ImageIO.write(createImage(validateCode), "jpeg", output);
System.out.println("a:"+a);
} catch (IOException e) {
e.printStackTrace();
}
input = new ByteArrayInputStream(output.toByteArray());
try {
input.close();
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public String execute() throws Exception {
//创建验证码
String[] validateCode = createCode();
//创建验证码图片
createInputStream(validateCode);
//把验证码的值放入session中
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("validateCode",validateCode);
return SUCCESS;
}

}


Struts2.xml

<action name="imageIdCode" class="demo.action.IdCode" method="execute">
<result name="success" type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">input</param>
</result>
</action>


jsp

<script>
function changeIdCode(){
$("#idCodee").attr("src","imageIdCode.action?aa"+Math.random())
}
</script>
<img onclick="changeIdCode()" alt="验证码" title="点击更换" src="imageIdCode.action" id="idCodee"/></td><td id="idcodeid">
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: