java+Struts2生成验证码

来源:互联网 发布:大智慧数据接口 编辑:程序博客网 时间:2024/05/21 14:02



public class VerifyCode {
 private int w = 70;
 private int h = 35;
  private Random r = new Random();
  // {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"}
 private String[] fontNames  = {"宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312"};
 private String codes  = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";
 private Color bgColor  = new Color(255, 255, 255);
 private String text ;
 
 private Color randomColor () {
  int red = r.nextInt(150);
  int green = r.nextInt(150);
  int blue = r.nextInt(150);
  return new Color(red, green, blue);
 }
 
 private Font randomFont () {
  int index = r.nextInt(fontNames.length);
  String fontName = fontNames[index];
  int style = r.nextInt(4);
  int size = r.nextInt(5) + 24;
  return new Font(fontName, style, size);
 }
 
 private void drawLine (BufferedImage image) {
  int num  = 3;
  Graphics2D g2 = (Graphics2D)image.getGraphics();
  for(int i = 0; i < num; i++) {
   int x1 = r.nextInt(w);
   int y1 = r.nextInt(h);
   int x2 = r.nextInt(w);
   int y2 = r.nextInt(h);
   g2.setStroke(new BasicStroke(1.5F));
   g2.setColor(Color.BLUE);
   g2.drawLine(x1, y1, x2, y2);
  }
 }
 
 private char randomChar () {
  int index = r.nextInt(codes.length());
  return codes.charAt(index);
 }
 
 private BufferedImage createImage () {
  BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
  Graphics2D g2 = (Graphics2D)image.getGraphics();
  g2.setColor(this.bgColor);
  g2.fillRect(0, 0, w, h);
   return image;
 }
 
 public BufferedImage getImage () {
  BufferedImage image = createImage();
  Graphics2D g2 = (Graphics2D)image.getGraphics();
  StringBuilder sb = new StringBuilder();
  // 向图片中画4个字符
  for(int i = 0; i < 4; i++)  {
   String s = randomChar() + "";
   sb.append(s);
   float x = i * 1.0F * w / 4;
   g2.setFont(randomFont());
   g2.setColor(randomColor());
   g2.drawString(s, x, h-5);
  }
  this.text = sb.toString();
  drawLine(image);
  return image;
 }
 
 public String getText () {
  return text;
 }
 
 public static void output (BufferedImage image, OutputStream out)
    throws IOException {
  ImageIO.write(image, "JPEG", out);
 }
}

在struts上使用添加方法
public  ByteArrayInputStream getout()
    throws IOException {
  ByteArrayInputStream input=null;      
     ByteArrayOutputStream output = new ByteArrayOutputStream();          
     ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);      
     ImageIO.write(getImage(), "JPEG", imageOut);      
     imageOut.close();      
     return input = new ByteArrayInputStream(output.toByteArray());      
}
action
public class VcodeAction extends ActionSupport{
 
 private VerifyCode v= new VerifyCode();
private ByteArrayInputStream  inputStream;
 //生成验证码
 public String vcode() throws IOException{
  setInputStream(v.getout());
  VCode=v.getText();
  return SUCCESS;
 }
 }
 //流  
 private void setInputStream(ByteArrayInputStream inputStream) {
  this.inputStream=inputStream;
 
 }
  public ByteArrayInputStream getInputStream() {      
         return inputStream;      
     }
 
}
Struts2 XML配置

<action name="code_*" class="action.VcodeAction" method="{1}" >
  <result type="stream">  
                <param name="contentType">image/jpeg</param>  
                <param name="inputName">inputStream</param>  
        </result>  
jsp页面使用
<script type="text/javascript" src="js/jquery-1.5.1.js">
 function changeImg(){    
     $("#authCode").attr("src","code_vcode.action?d="+new Date().getTime());    
 }  
 </script>
  </head>
 
  <body>
  <center>
     <br>
     <form action="code_YanzhengVcode.action" method="post">
     <input type="text" />
     <img src="code_vcode.action" alt="验证码" id="authCode" onclick="changeImg()">
     <a href="javascript:changeImg()">看不清,换一张!</a><br>
     <input type="text" name="vcode"/>
     <input type="submit" value="提交"/> ${vcode}  
     </form>


public class VerifyCode {
 private int w = 70;
 private int h = 35;
  private Random r = new Random();
  // {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"}
 private String[] fontNames  = {"宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312"};
 private String codes  = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";
 private Color bgColor  = new Color(255, 255, 255);
 private String text ;
 
 private Color randomColor () {
  int red = r.nextInt(150);
  int green = r.nextInt(150);
  int blue = r.nextInt(150);
  return new Color(red, green, blue);
 }
 
 private Font randomFont () {
  int index = r.nextInt(fontNames.length);
  String fontName = fontNames[index];
  int style = r.nextInt(4);
  int size = r.nextInt(5) + 24;
  return new Font(fontName, style, size);
 }
 
 private void drawLine (BufferedImage image) {
  int num  = 3;
  Graphics2D g2 = (Graphics2D)image.getGraphics();
  for(int i = 0; i < num; i++) {
   int x1 = r.nextInt(w);
   int y1 = r.nextInt(h);
   int x2 = r.nextInt(w);
   int y2 = r.nextInt(h);
   g2.setStroke(new BasicStroke(1.5F));
   g2.setColor(Color.BLUE);
   g2.drawLine(x1, y1, x2, y2);
  }
 }
 
 private char randomChar () {
  int index = r.nextInt(codes.length());
  return codes.charAt(index);
 }
 
 private BufferedImage createImage () {
  BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
  Graphics2D g2 = (Graphics2D)image.getGraphics();
  g2.setColor(this.bgColor);
  g2.fillRect(0, 0, w, h);
   return image;
 }
 
 public BufferedImage getImage () {
  BufferedImage image = createImage();
  Graphics2D g2 = (Graphics2D)image.getGraphics();
  StringBuilder sb = new StringBuilder();
  // 向图片中画4个字符
  for(int i = 0; i < 4; i++)  {
   String s = randomChar() + "";
   sb.append(s);
   float x = i * 1.0F * w / 4;
   g2.setFont(randomFont());
   g2.setColor(randomColor());
   g2.drawString(s, x, h-5);
  }
  this.text = sb.toString();
  drawLine(image);
  return image;
 }
 
 public String getText () {
  return text;
 }
 
 public static void output (BufferedImage image, OutputStream out)
    throws IOException {
  ImageIO.write(image, "JPEG", out);
 }
}

在struts上使用添加方法
public  ByteArrayInputStream getout()
    throws IOException {
  ByteArrayInputStream input=null;      
     ByteArrayOutputStream output = new ByteArrayOutputStream();          
     ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);      
     ImageIO.write(getImage(), "JPEG", imageOut);      
     imageOut.close();      
     return input = new ByteArrayInputStream(output.toByteArray());      
}
action
public class VcodeAction extends ActionSupport{
 
 private VerifyCode v= new VerifyCode();
private ByteArrayInputStream  inputStream;
 //生成验证码
 public String vcode() throws IOException{
  setInputStream(v.getout());
  VCode=v.getText();
  return SUCCESS;
 }
 }
 //流  
 private void setInputStream(ByteArrayInputStream inputStream) {
  this.inputStream=inputStream;
 
 }
  public ByteArrayInputStream getInputStream() {      
         return inputStream;      
     }
 
}
Struts2 XML配置

<action name="code_*" class="action.VcodeAction" method="{1}" >
  <result type="stream">  
                <param name="contentType">image/jpeg</param>  
                <param name="inputName">inputStream</param>  
        </result>  
jsp页面使用
<script type="text/javascript" src="js/jquery-1.5.1.js">
 function changeImg(){    
     $("#authCode").attr("src","code_vcode.action?d="+new Date().getTime());    
 }  
 </script>
  </head>
 
  <body>
  <center>
     <br>
     <form action="code_YanzhengVcode.action" method="post">
     <input type="text" />
     <img src="code_vcode.action" alt="验证码" id="authCode" onclick="changeImg()">
     <a href="javascript:changeImg()">看不清,换一张!</a><br>
     <input type="text" name="vcode"/>
     <input type="submit" value="提交"/> ${vcode}  
     </form>

0 0
原创粉丝点击