熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

JSP驗證碼代碼

2013-11-23 19:20:59  來源: Java核心技術 

  生成有個隨機數字和雜亂背景的圖片數字和背景顏色會改變服務器端刷新(用historygo()也會變)
    原型參考ALIBABA 
    產生驗證碼圖片的文件imagejsp

  <%@ page contentType=image/jpeg import=javaawt*javaawtimage*javautil*javaximageio* %>
    <%!
    Color getRandColor(int fcint bc){//給定范圍獲得隨機顏色
            Random random = new Random();
            if(fc>) fc=;
            if(bc>) bc=;
            int r=fc+randomnextInt(bcfc);
            int g=fc+randomnextInt(bcfc);
            int b=fc+randomnextInt(bcfc);
            return new Color(rgb);
            }
    %>
    <%
    //設置頁面不緩存
    responsesetHeader(PragmaNocache);
    responsesetHeader(CacheControlnocache);
    responsesetDateHeader(Expires );

  // 在內存中創建圖象
    int width= height=;
    BufferedImage image = new BufferedImage(width height BufferedImageTYPE_INT_RGB);

  // 獲取圖形上下文
    Graphics g = imagegetGraphics();

  //生成隨機類
    Random random = new Random();

  // 設定背景色
    gsetColor(getRandColor());
    gfillRect( width height);

  //設定字體
    gsetFont(new Font(Times New RomanFontPLAIN));

  //畫邊框
    //gsetColor(new Color());
    //gdrawRect(widthheight);

  // 隨機產生條干擾線使圖象中的認證碼不易被其它程序探測到
    gsetColor(getRandColor());
    for (int i=;i<;i++)
    {
     int x = randomnextInt(width);
     int y = randomnextInt(height);
            int xl = randomnextInt();
            int yl = randomnextInt();
     gdrawLine(xyx+xly+yl);
    }

  // 取隨機產生的認證碼(位數字)
    String sRand=;
    for (int i=;i<;i++){
        String rand=StringvalueOf(randomnextInt());
        sRand+=rand;
        // 將認證碼顯示到圖象中
        gsetColor(new Color(+randomnextInt()+randomnextInt()+randomnextInt()));//調用函數出來的顏色相同可能是因為種子太接近所以只能直接生成
        gdrawString(rand*i+);
    }

  // 將認證碼存入SESSION
    sessionsetAttribute(randsRand);

  // 圖象生效
    gdispose();

  // 輸出圖象到頁面
    ImageIOwrite(image JPEG responsegetOutputStream());

  %>


使用驗證碼圖片的文件ajsp

  <%@ page contentType=text/html;charset=gb %>
    <!DOCTYPE HTML PUBLIC //WC//DTD HTML Transitional//EN>
    <html>
    <head>
    <title>認證碼輸入頁面</title>
    <meta httpequiv=ContentType content=text/html; charset=gb>
    <META HTTPEQUIV=Pragma CONTENT=nocache>
    <META HTTPEQUIV=CacheControl CONTENT=nocache>
    <META HTTPEQUIV=Expires CONTENT=>
    </head>
    <body>
    <form method=post action=checkjsp>
    <table>
    <tr>
    <td align=left>系統產生的認證碼</td>
    <td><img border= src=imagejsp></td>
    </tr>
    <tr>
    <td align=left>輸入上面的認證碼</td>
    <td><input type=text name=rand maxlength= value=></td>
    </tr>
    <tr>
    <td colspan= align=center><input type=submit value=提交檢測></td>
    </tr>
    </form>
    </body>
    </html>

  驗證的頁面checkjsp

  <%@ page contentType=text/html; charset=gb language=java import=javasql* errorPage= %>
    <html>
    <head>
    <title>認證碼驗證頁面</title>
    <meta httpequiv=ContentType content=text/html; charset=gb>
    <META HTTPEQUIV=Pragma CONTENT=nocache>
    <META HTTPEQUIV=CacheControl CONTENT=nocache>
    <META HTTPEQUIV=Expires CONTENT=>
    </head>

  <body>
    <%
     String rand = (String)sessiongetAttribute(rand);
     String input = requestgetParameter(rand);
    %>
    系統產生的認證碼為 <%= rand %><br>
    您輸入的認證碼為 <%= input %><br>
    <br>
    <%
      if (randequals(input)) {
    %>
    <font color=green>輸入相同認證成功!</font>
    <%
      } else {
    %>
    <font color=red>輸入不同認證失敗!</font>
    <%
      }
    %>
    </body>
    </html>


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26699.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.