帮忙给个好的JSP验证码的示例

解决方案 »

  1.   

    我今天找到一个但是在TOMCAT下可以的,在RESIN和WEBLOGIC下都不行。错误提示:java.lang.NoClassDefFoundError: sun/awt/X11GraphicsEnvironment
    什么原因?
      

  2.   

    <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,com.sun.image.codec.jpeg.*,java.util.*"%>
    <%
    //设置页面不缓存
    response.setHeader("Pragma","No-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires", 0); //获取数字
    String strRnd = request.getParameter("rnd");
    if (strRnd == null) strRnd = "8888"; int width = 40, height = 20;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics g = image.getGraphics(); // 设定背景色
    g.setColor(Color.white); g.fillRect(0, 0, width, height); //背景图
    Toolkit tool = Toolkit.getDefaultToolkit();
    Image mBdimg = tool.getImage(request.getRealPath("/") + "AdvanceCode.gif"); //设定字体
    g.setColor(Color.black);
    g.setFont(new Font("Comic Sans MS", Font.BOLD, 13));
    g.drawImage(mBdimg, 0, 0, null, null);
    //输入文字 g.drawString(strRnd, 5 , 15);
    g.dispose(); //输出
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
    out.clear();
    encoder.encode(image);
    tool = null;
    mBdimg = null;
    encoder = null;
    image = null;
    g = null;
    %>
      

  3.   

    package com.guanghua.util.tools;import java.awt.*;
    import java.awt.image.*;
    import java.util.*;
    /**
     * Created by IntelliJ IDEA.
     * User: zyzhou
     * Date: 2006-4-26
     * Time: 16:14:36
     * To change this template use File | Settings | File Templates.
     */
    public class CheckCode {
        public String sRand="";    public 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);
        }
        public BufferedImage creatImage(){// 在内存中创建图象
        int width=60, height=20;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 获取图形上下文
        Graphics g = image.getGraphics();//生成随机类
        Random random = new Random();// 设定背景色
        g.setColor(getRandColor(200,250));
        g.fillRect(0, 0, width, height);//设定字体
        g.setFont(new Font("Times New Roman",Font.PLAIN,18));//画边框
    //g.setColor(new Color());
    //g.drawRect(0,0,width-1,height-1);
    // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
        g.setColor(getRandColor(160,200));
        for (int i=0;i<155;i++)
        {
        int x = random.nextInt(width);
        int y = random.nextInt(height);
        int xl = random.nextInt(12);
        int yl = random.nextInt(12);
        g.drawLine(x,y,x+xl,y+yl);
        }// 取随机产生的认证码(4位数字)
    //String rand = request.getParameter("rand");
    //rand = rand.substring(0,rand.indexOf("."));    for (int i=0;i<4;i++){
        String rand=String.valueOf(random.nextInt(10));
        sRand+=rand;
    // 将认证码显示到图象中
        g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
        g.drawString(rand,13*i+6,16);
        }
    // 图象生效
        g.dispose();
        return image;
        }}