歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

運用Struts2.0實現頁面中的驗證碼

<1>畫驗證碼核心類ValidateCodeAction

  1. package com.tarena.common.action;  
  2.   
  3. import java.awt.*;  
  4. import java.awt.image.BufferedImage;  
  5. import java.io.ByteArrayInputStream;  
  6. import java.io.ByteArrayOutputStream;  
  7. import java.util.Random;  
  8. import javax.imageio.ImageIO;  
  9. import javax.imageio.stream.ImageOutputStream;  
  10. import com.opensymphony.xwork2.ActionContext;  
  11. /** 
  12.  * 網頁中驗證碼的實現 
  13.  * @author JimmyZhang 
  14.  * @since 2012.5.10 
  15.  * 
  16.  */  
  17. public class ValidateCodeAction {  
  18.       
  19.     private ByteArrayInputStream inputStream;  
  20.     //默認的執行方法   
  21.     public String execute() throws Exception{  
  22.         Random r = new Random();  
  23.         //BufferedImage相當與緩存在內存中的圖像   
  24.         BufferedImage image =   
  25.         new BufferedImage(60,//繪圖區域的長度   
  26.                           20,//繪圖區域的高度   
  27.                           BufferedImage.TYPE_INT_RGB);  
  28.         //獲取繪圖工具Graphiscs   
  29.         Graphics g = image.getGraphics();  
  30.         //設置繪圖顏色   
  31.         g.setColor(new Color(r.nextInt(255),  
  32.                              r.nextInt(255),  
  33.                              r.nextInt(255)));  
  34.         //從原點(0,0)填充繪圖區域   
  35.         g.fillRect(006020);  
  36.         //生成一個隨機的字符串(5位數字)   
  37.         String number = String.valueOf(r.nextInt(99999));  
  38.         //將number繪制在image中   
  39.         g.setColor(new Color(0,0,0));  
  40.         g.drawString(number, 515);  
  41.         //將number保存在Session中   
  42.         ActionContext ac = ActionContext.getContext();  
  43.         ac.getSession().put("vcode", number);  
  44.         //畫干擾線   
  45.         for(int i=0; i<3;i++){  
  46.             drawLine(g,r);  
  47.         }  
  48.         //寫入到字節輸出流中   
  49.          ByteArrayOutputStream output = new ByteArrayOutputStream();  
  50.          ImageOutputStream imageOutput =   
  51.                  ImageIO.createImageOutputStream(output);  
  52.          //將圖像image寫入到imageOutput中   
  53.          ImageIO.write(image, "jpeg", imageOutput);  
  54.          //根據output構建inputStream   
  55.          inputStream = new ByteArrayInputStream(  
  56.                  output.toByteArray());  
  57.          //對象之間的轉換--image-->ByteArrayOutStream-->ByteArrayInputStream   
  58.          return "success";   
  59.     }  
  60.       
  61.     //輔助方法,用於繪制一條干擾線   
  62.     private void drawLine(Graphics g,Random r){  
  63.         g.setColor(new Color(r.nextInt(255),  
  64.                              r.nextInt(255),  
  65.                              r.nextInt(255)));  
  66.         //drawLine(x1,y1,x2,y2)   
  67.         g.drawLine(  
  68.                  r.nextInt(60), r.nextInt(20),  
  69.                  r.nextInt(60), r.nextInt(20));  
  70.     }  
  71.       
  72.     public ByteArrayInputStream getInputStream() {  
  73.         return inputStream;  
  74.     }  
  75.   
  76.     public void setInputStream(ByteArrayInputStream inputStream) {  
  77.         this.inputStream = inputStream;  
  78.     }  
  79.       
  80. }  
Copyright © Linux教程網 All Rights Reserved