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重新修飾一下。