Web開發中的驗證碼圖片的生成-基於Java的實現

你們在使用Web網站的時候,常常會發現有個驗證碼須要輸入,這是驗證碼用來作什麼事情的呢?其實很簡單,驗證碼圖片的做用是讓用戶經過肉眼來觀察圖片, 把圖片中的內容填寫到輸入框中,在登陸的時候,若是驗證碼內容輸入不正確,就算你的登陸用戶名和密碼都正確也不行,這樣能夠很好的防治有人用程序不停的猜 測別人的賬號好密碼,由於程序難以從一個圖片中提取驗證碼的內容,從難以使用程序來進行重複猜想,這樣只是憑人工的辦法,是很難在短期內猜出賬號密碼 的。因此驗證碼圖片實際是爲了保護用戶的權益。那麼到底如何在web開發中使用驗證碼圖片呢?
     驗證碼圖片是由程序動態產生的,每次訪問的內容都是隨機的。那麼如何採用程序動態產生圖片,並可以顯示在客戶端頁面中呢?原理很簡單,對於java而言, 咱們首先開發一個Servlet,這個Servlet的任務就是給客戶端產生一個驗證碼圖片的輸入,示例代碼以下:html

package  com.web.servlet;
import  java.awt.Color;
import  java.awt.Graphics;
import  java.awt.image.BufferedImage;
import  java.io.IOException;
import  javax.servlet.ServletException;
import  javax.servlet.ServletOutputStream;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import  com.sun.image.codec.jpeg.JPEGCodec;
import  com.sun.image.codec.jpeg.JPEGImageEncoder;
public   class  ValidateImgServlet  extends  javax.servlet.http.HttpServlet  implements javax.servlet.Servlet ...{
     protected   void  doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException ...{
        response.setContentType( "image/jpeg" );
       
         //產生四位驗證碼
        StringBuffer sb =  new  StringBuffer( 4 );
         for ( int  i= 0 ; i< 4 ; i++) ...{
             int  n = ( int )(Math.random() *  10 );
            sb.append(n);
        }
        String validateCode = sb.toString();
         //將驗證碼記錄在session中,便於用戶輸入以後的驗證
        request.getSession().setAttribute( "ValidateCode" , validateCode);
       
         //建立緩存圖片
        BufferedImage image =  new  BufferedImage( 80 ,  25 , BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
                   
        g.setColor(Color.LIGHT_GRAY);
        g.fillRect( 0 ,  0 ,  80 ,  25 );
        g.setColor(Color.BLACK);
        g.drawString(validateCode,  10 ,  20 );
        g.dispose();
        ServletOutputStream outStream = response.getOutputStream();
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream);
        encoder.encode(image);
        outStream.close();
    }                     
}

在web.xml中對這個Servlet進行配置,配置信息以下:java

< servlet >
     < description > </ description >
     < display-name > ValidateImgServlet </ display-name >
     < servlet-name > ValidateImgServlet </ servlet-name >
     < servlet-class > com.web.servlet.ValidateImgServlet </ servlet-class >
   </ servlet >
   < servlet-mapping >
     < servlet-name > ValidateImgServlet </ servlet-name >
     < url-pattern > /validateimg.jpg </ url-pattern >
   </ servlet-mapping >


好了,如今咱們能夠在登陸頁面中使用這個動態的驗證碼圖片了,login.jsp頁面內容以下:web

< %...@ page  language = "java"   contentType = "text/html; charset=UTF-8"
     pageEncoding = "UTF-8" % >
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
< meta   http-equiv = "Content-Type"   content = "text/html; charset=UTF-8" >
< title > Insert title here </ title >
</ head >
< body >
    請輸入登陸信息: < br   />
     < form   name = "login_form"   method = "post"   action = "login.action" >
    用戶名稱: < input   type = "text"   name = "username"   /> < br   />
    用戶密碼: < input   type = "password"   name = "password"   /> < br   />
    驗證碼: < input   type = "text"   name = "validatecode"   /> < img   src = "validateimg.jpg"   border = "0"  /> < br   />
     < input   type = "submit"   value = "登陸"   />
     </ form >
</ body >
</ html >

到這裏,若是你在web容器中運行這個jsp,你將會在瀏覽器中看見一個帶有驗證碼圖片的登陸表單,後續的驗證任務就交給你了。祝你成功。瀏覽器

相關文章
相關標籤/搜索