1:首先实现一个servlet用来生成图片(当然也可以用jsp实现): /*  * ClassName: ValidateCode.java  * Author: qiujy  * Version: v1.0  * CreateDate: 2005-12-30  *  * Copyright 2005-2006 www.mobstar.cn All rights reserved.  */ package com.mob.common; 
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Date; import java.util.Random; 
import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 
public class ValidateCode extends HttpServlet { 
 // Process the HTTP Get request 
 public void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {   // 设置页面不缓存   response.setHeader("Pragma", "No-cache");   response.setHeader("Cache-Control", "no-cache");   response.setDateHeader("Expires", 0); 
  // 设置图片的长宽   int width = 62, height = 22; 
  // ////// 创建内存图像   BufferedImage image = new BufferedImage(width, height,     BufferedImage.TYPE_INT_RGB);   // 获取图形上下文   Graphics g = image.createGraphics(); 
  // 设定图像背景色(因为是做背景,所以偏淡)   g.setColor(getRandColor(180, 250));   g.fillRect(0, 0, width, height);   // 设置字体   g.setFont(new Font("Times New Roman", Font.PLAIN, 17)); 
  // /////设置默认生成4个验证码   int length = 4;   java.util.Random rand = new Random(); // 设置随机种子 
  /*    * if (request.getParameter("length") != null) { try { length =    * Integer.parseInt(request.getParameter("length")); }catch    * (NumberFormatException e) {} }    */   // 设置备选验证码:包括"a-z"和数字"0-9"   String base = "abcdefghijklmnopqrstuvwxyz0123456789";   int size = base.length();   StringBuffer str = new StringBuffer();   for (int i = 0; i < length; i++) {    int start = rand.nextInt(size);    String tmpStr = base.substring(start, start + 1); 
   str.append(tmpStr);    // 生成随机颜色(因为是做前景,所以偏深)    g.setColor(getRandColor(10, 150)); 
   // 将此字画到图片上    // g.drawString(str.toString(), 4, 17);    g.drawString(tmpStr, 13 * i + 6 + rand.nextInt(5), 14 + rand      .nextInt(6)); 
  } 
  // 将认证码存入session   request.getSession().setAttribute("valiCode", str.toString()); 
  // 图象生效   g.dispose(); 
  // 输出图象到页面   ImageIO.write(image, "JPEG", response.getOutputStream()); 
 } 
 public void doPost(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {   this.doGet(request, response);  } 
 // 给定范围获得一个随机颜色  Color getRandColor(int fc, int bc) {   Random random = new Random();   if (fc > 255)    fc = 255;   if (bc > 255)    bc = 255;   int r = fc + random.nextInt(bc - fc);   int g = fc + random.nextInt(bc - fc);   int b = fc + random.nextInt(bc - fc);   return new Color(r, g, b);  } 
} 
2:在web.xml中做如下配置  <!-- validate code maker begin -->  <servlet>   <servlet-name>CodeMakerServlet</servlet-name>   <servlet-class>com.mob.common.ValidateCode</servlet-class>  </servlet>  <servlet-mapping>   <servlet-name>CodeMakerServlet</servlet-name>   <url-pattern>/codeMaker</url-pattern>  </servlet-mapping>   <!-- validate code maker end --> 
3:然后在需要显示验证码的地方加入以下代码就可以了 
<img alt="" src="/codeMaker" width="60" height="22"/>  
4:若要验证是否填写正确:可如下做法 
 在输入页面加入如下代码 
<tr>           <td align="right">输入验证码:  </td>           <td><input type="text" name="check_num" id="check_num" size="10" maxlength="10">             <img src="/blog/codeMaker"/>            <!--<img alt="" src="/blog/com/mob/common/ValidateCode" width="40" height="16"/>-->            </td> </tr>   
在处理请求的java类(如struts中的action中)中只需要这样做这要可以了: 
String valiCode = null;   Object obj = request.getSession().getAttribute("valiCode");   if (obj != null && !obj.equals("")) {    valiCode = obj.toString();   } 
  String check_num = loginForm.getCheck_num();   if (check_num != null && !check_num.equals("") && !check_num.trim().equals(valiCode)) {    request      .setAttribute("errorMessage",        "请注意正确输入登录验证码!");    return mapping.getInputForward();   } 
最终效果如下:    |