java web,產生驗證碼圖片的技術,java驗證碼

來源:互聯網
上載者:User

java web,產生驗證碼圖片的技術,java驗證碼

偶然知道原來有些網站的驗證碼圖片都是隨機產生的,後來聽人講了一下,就做了這個小例子

產生圖片,繪製背景,數字,幹擾線用到了java.awt包,主要使用BufferedImage來產生圖片,然後使用Graphics對象來繪製內容。

代碼如下:

 1 package com.util; 2  3 import java.awt.Color; 4 import java.awt.Graphics; 5 import java.awt.image.BufferedImage; 6 import java.util.Random; 7  8 public class ImageCodeUtil { 9     10     public static BufferedImage getImage(){11         Random r = new Random();12         //1.建立一個bufferedimage對象13         BufferedImage image = new BufferedImage(60, 20, BufferedImage.TYPE_INT_RGB);14         //2.繪製長方形15         Graphics g = image.getGraphics();16         g.setColor(new Color(233, 222, 220));17         g.fillRect(0, 0, 60, 20);18         //3.繪製幹擾線19         for(int i = 0;i < 200;i++){20             g.setColor(new Color(40+r.nextInt(200),40+r.nextInt(200),40+r.nextInt(200)));21             int x = r.nextInt(50);22             int y = r.nextInt(20);23             g.drawLine(x,y, x+r.nextInt(20), y+r.nextInt(15));24         }25         //4.寫四位元字26         g.setColor(new Color(23, 22, 20));27         int checkCode = r.nextInt(9000)+1000;28         g.drawString(checkCode+"", 15, 15);29         //關閉Graphics對象,釋放資源30         g.dispose();31         return image;32     }33     34 }

這是產生圖片,在網頁顯示中,用img標籤就可以,通過servlet請求圖片資源,代碼如下:

1 <img alt="" src="check">

最後在servlet代碼中響應瀏覽器發來的請求,將圖片資源發送到瀏覽器,代碼如下:

package com.controller;import java.awt.image.BufferedImage;import java.io.IOException;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.util.ImageCodeUtil;/** * Servlet implementation class CheckCodeServlet */@WebServlet("/check")public class CheckCodeServlet extends HttpServlet {    private static final long serialVersionUID = 1L;           /**     * @see HttpServlet#HttpServlet()     */    public CheckCodeServlet() {        super();        // TODO Auto-generated constructor stub    }    /**     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)     */    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub        //設定傳回型別        response.setContentType("image/jpeg");        //產生驗證碼圖片用到了java.awt包        BufferedImage image = ImageCodeUtil.getImage();        //將image通過outputStream返回        ImageIO.write(image, "JPEG", response.getOutputStream());    }        }

以上只是每一次重新整理頁面請求服務的時候驗證碼才會重新整理,可以加入js代碼註冊點擊事件,使之可以點擊驗證碼圖片就可以更換,代碼如下:

註:此處我使用的jq

$("img").click(function(){            $(this).attr("src","/ServletTest/check?a="+new Date().getMilliseconds());            });

至此,驗證碼的效果已經實現。具體在頁面上的美觀顯示,在網頁上通過css重新修飾一下。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.