运用Struts2.0实现页面中的验证码
运用Struts2.0实现页面中的验证码
<1>画验证码核心类ValidateCodeAction
- package com.tarena.common.action;
- import java.awt.*;
- import java.awt.image.BufferedImage;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.util.Random;
- import javax.imageio.ImageIO;
- import javax.imageio.stream.ImageOutputStream;
- import com.opensymphony.xwork2.ActionContext;
- /**
- * 网页中验证码的实现
- * @author JimmyZhang
- * @since 2012.5.10
- *
- */
- public class ValidateCodeAction {
- private ByteArrayInputStream inputStream;
- //默认的执行方法
- public String execute() throws Exception{
- Random r = new Random();
- //BufferedImage相当与缓存在内存中的图像
- BufferedImage image =
- new BufferedImage(60,//绘图区域的长度
- 20,//绘图区域的高度
- BufferedImage.TYPE_INT_RGB);
- //获取绘图工具Graphiscs
- Graphics g = image.getGraphics();
- //设置绘图颜色
- g.setColor(new Color(r.nextInt(255),
- r.nextInt(255),
- r.nextInt(255)));
- //从原点(0,0)填充绘图区域
- g.fillRect(0, 0, 60, 20);
- //生成一个随机的字符串(5位数字)
- String number = String.valueOf(r.nextInt(99999));
- //将number绘制在image中
- g.setColor(new Color(0,0,0));
- g.drawString(number, 5, 15);
- //将number保存在Session中
- ActionContext ac = ActionContext.getContext();
- ac.getSession().put("vcode", number);
- //画干扰线
- for(int i=0; i<3;i++){
- drawLine(g,r);
- }
- //写入到字节输出流中
- ByteArrayOutputStream output = new ByteArrayOutputStream();
- ImageOutputStream imageOutput =
- ImageIO.createImageOutputStream(output);
- //将图像image写入到imageOutput中
- ImageIO.write(image, "jpeg", imageOutput);
- //根据output构建inputStream
- inputStream = new ByteArrayInputStream(
- output.toByteArray());
- //对象之间的转换--image-->ByteArrayOutStream-->ByteArrayInputStream
- return "success";
- }
- //辅助方法,用于绘制一条干扰线
- private void drawLine(Graphics g,Random r){
- g.setColor(new Color(r.nextInt(255),
- r.nextInt(255),
- r.nextInt(255)));
- //drawLine(x1,y1,x2,y2)
- g.drawLine(
- r.nextInt(60), r.nextInt(20),
- r.nextInt(60), r.nextInt(20));
- }
- public ByteArrayInputStream getInputStream() {
- return inputStream;
- }
- public void setInputStream(ByteArrayInputStream inputStream) {
- this.inputStream = inputStream;
- }
- }
|
评论暂时关闭