1. 程式人生 > >java中使用Servlet實現驗證碼

java中使用Servlet實現驗證碼

一、驗證碼作用

驗證碼定義:是一種區別使用者是計算機還是人的公共全自動程式;
這裡寫圖片描述

二、使用servlet實現驗證碼

1、製作頁面
①輸入框
②顯示驗證碼的圖片
這裡寫圖片描述
圖片的路徑直接指向servlet,可以在servlet中動態生成驗證碼。

2、生成圖片需要用到的類:

(1)BufferedImage:影象資料緩衝區

(2)Graphics:繪製圖片

(3)Color:獲取顏色

(4)Random:生成隨機數

(5)ImageIO:輸出圖片

3、步驟

ImageServlet類

(1)定義BufferedImage物件

(2)獲取Graphics物件

(3)通過Random產生隨機驗證碼資訊

(4)使用Graphics繪製圖片

(5)記錄驗證碼資訊到session中

(6)使用ImageIO輸出圖片

LoginServlet類

(1)獲取頁面驗證碼

(2)獲取Session儲存的驗證碼

(3)比較驗證碼

(4)返回校驗結果

4、建立專案checkcode

(1) index.jsp
這裡寫圖片描述
給img 標籤加個id
這裡寫圖片描述

編制重新整理圖片的JS程式碼

<script type="text/javascript">
        function
reloadCode(){
//定義一個時間 var time = new Date().getTime(); //時間不用,傳參不同,可以重新進行請求 document.getElementById("imagecode").src="<%=request.getContextPath() %>/servlet/ImageServlet?d="+time; }
</script>

(2) ImageServlet

public class ImageServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
                //圖片載入物件   引數(長,寬,圖片型別)
        BufferedImage bi = new BufferedImage(68,22,BufferedImage.TYPE_INT_RGB);
                //建立畫筆
        Graphics g = bi.getGraphics();
        Color c = new Color(200,150,255);
        g.setColor(c);
                //給背景加個框框
        g.fillRect(0, 0, 68, 22);

                //隨機字串
        char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
        Random r = new Random();
        int len=ch.length,index;
        StringBuffer sb = new StringBuffer();

        for(int i=0; i<4; i++){
            index = r.nextInt(len);
                        //隨機給生成的字元生成一個顏色
            g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));

                        //把字串寫到圖片上
            g.drawString(ch[index]+"", (i*15)+3, 18);
            sb.append(ch[index]);
        }
                //字串放到Session中
        request.getSession().setAttribute("piccode", sb.toString());
                //輸出圖片
        ImageIO.write(bi, "JPG", response.getOutputStream());
    }
}

5、效果:
這裡寫圖片描述