你们在使用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,你将会在浏览器中看见一个带有验证码图片的登陆表单,后续的验证任务就交给你了。祝你成功。浏览器