你們在使用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,你將會在瀏覽器中看見一個帶有驗證碼圖片的登陸表單,後續的驗證任務就交給你了。祝你成功。瀏覽器