項目模塊--1.實現驗證碼功能

簡介:

Java web項目中,在後端隨機生成一個驗證碼,繪製成圖像,並在圖像上添加兩條幹擾線,發送到瀏覽器,供用戶使用。web

本片博文內容包括,功能實現的邏輯步驟,Java實現代碼,生成的驗證碼圖片展現。後端

步驟一:生成一個包含四個字符的字符串

使用一個數組char[]+一個Random對象實現該功能。代碼以下:數組

 
 
private char code[]={
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '2',
'3', '4', '5', '6', '7', '8', '9' };
Random rd = new Random();

String result = "";

for(int i = 0;i < 4;i++ ){
  result+=code[rd.nextInt[code.length]];
}
 


步驟二:繪製圖片

使用一個BufferdImage對象,Graphics對象,Font對象瀏覽器

BufferedImage類:一個圖像類,它生成的圖像在內存中佔有一個緩存區。緩存

使用方法有兩種:session

1.讀取一個已經存在的圖片文件到BufferedImage對象的緩存區中,而後對該圖片文件進行操做。dom

  BufferedImage b = ImageIO.read(new FileOutputStream(File f));工具

2.建立一個BufferedImage對象,而後經過Graphics對象對其進行繪製。字體

  BufferedImage b = new BufferedImage(int width,int height,IndexColorModel cn);  //設定圖片的寬度,高度,顏色設定模式spa

  Graphics g = b.getGraphics();                        //獲得圖片繪製器

3.Graphics對象經常使用方法

  g.setColor(Color color);

  g.fillRect(int x,int y,int width,int heigh)                    //兩個一組,爲圖片的指定位置設置顏色,以圖片的左下角爲原點,(x,y)爲繪製圖片的左下

                                      //角座標,繪製面積爲width,height。

  g.drawString(String s,int x,int y)                      //在(x,y)座標系下繪製字符串,座標系原點爲BufferedImage的左下角

  g.drawLine(int x1,int y1,int x2,int y2)                    //在兩點之間繪製一條直線,顏色使用最近的g.setColor()設定。

  g.dispose()                               //釋放正在使用的系統資源

 1 BufferdImage bufferedImage = new     BufferedImage(50,30,BufferedImage.TYPE_INT_BGR);
 2 Graphics graphics = bufferedImage.getGraphics();
 3 Font font = new Font("Arial",Font.TRUETYPE_FONT,18);
 4 //設置背景顏色,並填充
 5 graphics.setColor(new Color(rd.nextInt(55)+200,rd.nextInt(55)+20,rd.nextInt(55)+200));
 6 graphics.fillRect(0,0,WIDTH,HEIGH);   //設定要填充的矩形的座標(x,y),矩形的寬度和高度
 7 //邊框顏色
 8 graphics.setColor(Color.black);
 9 graphics.fillRect(0,0,WIDTH-1,HEIGH-1);
10 //設置字體
11 graphics.setFont(font);        
12 for (int i = 0; i <result.length() ; i++) {
13             g.setColor(new Color(rd.nextInt(200),rd.nextInt(200),rd.nextInt(200)));
14             g.drawString(result.charAt(i)+"",12*i+1,16);  //須要繪製的字符串,繪製的位置。
15         }
16 for (int i = 0; i < 2 ; i++) {
17             g.setColor(new Color(rd.nextInt(200),rd.nextInt(200),rd.nextInt(200)));
18             int x1 = rd.nextInt(WIDTH);
19             int x2 = rd.nextInt(WIDTH);
20             int y1 = rd.nextInt(HEIGH);
21             int y2 = rd.nextInt(HEIGH);
22             g.drawLine(x1,y1,x2,y2);
23         }

步驟三:將圖片發送到瀏覽器端,存放這次產生的驗證碼中的字符串

設置瀏覽器端不能緩存驗證碼圖片

Pragma域名:用來包含實現特定的指令,Pragma:No-cache(不容許緩存響應或請求報文)

Cache-Controller域名:在HTTP:1.1中使用,指定緩存規則。

response.setHeader("Pragma","No-cache");   //通知瀏覽器不要使用緩存功能
        response.setHeader("Cache-Control","no-cache"); //通知瀏覽器不要緩存
        response.setDateHeader("Expires",0);

設置響應的媒體類型

response.setContentType("image/jpeg");

將驗證碼中的字符串發送到session中,以便驗證時從session中獲取

session.setAttribute("code",result);

將驗證碼圖片發送給瀏覽器端

1 try{
2      OutputStream os = reponse.getOutputStream();
3      ImageIo.write(image,"JPEG",os);  
4 }catch(IOException e){
5      e.printStackTrace();  
6 }

ImageIO類:

  圖像讀寫工具類,提供靜態方法來將任意格式的圖片讀取到內存中或寫入到文件中。

相關文章
相關標籤/搜索