1、int numuber=Math.abs(new Random().nextInt()%10)+1;改为int number=Math.abs(new Random().nextInt()%10)+1;2、<META http-equiv="Content-Type" content="text/html; charset=GB2312">
3、第一次运行要编译,所以慢,后来就快了。

解决方案 »

  1.   

    1.
    生成图像的servlet
    import java.io.*;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.awt.*;
    import java.awt.image.*;
    import javax.imageio.*;
    public class getImg extends HttpServlet {private 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);
      }//private Font mFont=new Font("宋体", Font.PLAIN,12);//设置字体
    //处理post
    public void doPost(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException {doGet(request,response);
    }
    public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException {  //设置页面不缓存
      response.setHeader("Cache-Control","no-store");
      response.setHeader("Pragma","no-cache");
      response.setDateHeader("Expires",0);// 在内存中创建图象
      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("宋体",Font.BOLD,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 sRand="";
      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);
      }// 将认证码存入SESSION
    HttpSession session=request.getSession();
    session.setAttribute("VerifyCode",sRand);// 图象生效
      g.dispose();
    // 输出图象到页面
      ImageIO.write(image, "JPEG", response.getOutputStream());}}
    2.中文
    <%@ page contentType="text/html; charset=GBK" %>
    3.看你机器和容器配置
      

  2.   

    速度慢,估计是你的配置问题,
    JSP刚开始运行的时候是比较慢,因为JSP要解释成SERVLET,然后才执行,不过解释后再运行的话速度就很快了!
    应该是你的那个随机数没有生成!
      

  3.   

    2。 <%@ page contentType="text/html;gb2312" %>
      

  4.   

    <%@ page contentType="text/html;gb2312" %>
    这个放最上面
    你的变量名对不上,改下就好了
      

  5.   

    <%@ page contentType="text/html; charset=GB2312" %>
    那个错了,这个对,放页面最上面
      

  6.   

    <% request.setCharacterEncoding("gb2312"); %>
      

  7.   

    1、int numuber=Math.abs(new Random().nextInt()%10)+1;改为int number=Math.abs(new Random().nextInt()%10)+1;2、<META http-equiv="Content-Type" content="text/html; charset=GB2312">
    3、第一次运行要编译,所以慢,后来就快了。
      

  8.   

    1:package com.aku.image;import java.io.*;
    import java.util.*;
    import com.sun.image.codec.jpeg.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.awt.*;
    import java.awt.image.*;/**
     * Title: getImg.java
     * Description: 这个class主要实现随机生成一个4位数的验证码,并写入session,
     * Copyright: Copyright (c) 2003
     * Company:
     * @author
     * @version 1.1
     */public class getImg
        extends HttpServlet {  private Font mFont = new Font("宋体", Font.PLAIN, 8); //设置字体
    //处理post
      public void doPost(HttpServletRequest request, HttpServletResponse response) throws
          ServletException, IOException {    doGet(request, response);
      }  public void doGet(HttpServletRequest request, HttpServletResponse response) throws
          ServletException, IOException {
    //取得一个1000-9999的随机数
        String s = "";    int intCount = 0;    intCount = (new Random()).nextInt(999999); //    if (intCount < 100000) {
          intCount += 100000;    }
        s = intCount + "";//对session付值。    HttpSession session = request.getSession(true);    session.setAttribute("getImg", s);    response.setContentType("image/gif");    ServletOutputStream out = response.getOutputStream();    BufferedImage image = new BufferedImage(35, 14, BufferedImage.TYPE_INT_RGB);    Graphics gra = image.getGraphics();
    //设置背景色
        gra.setColor(Color.yellow);    gra.fillRect(1, 1, 33, 12);
    //设置字体色
        gra.setColor(Color.black);    gra.setFont(mFont);
    //输出数字
        char c;       for (int i = 0; i < 6; i++) {         c = s.charAt(i);         gra.drawString(c + "", i * 11 + 6, 11); //7为宽度,11为上下高度位置       }
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);    encoder.encode(image);    out.close();
      }}2:
    <%@ page language="java" contentType="text/html;charset=gb2312" %>3:
    如果你的机器配置不高,当然慢,没有办法改变,呵呵,两年前我的机器也慢。
    还有问题就再联系。
      

  9.   


    楼上:
    <%@ page language="java" contentType="text/html;charset=gb2312" %>
    这句应该放在句首吧!
    那是否要改文件名啊!
      

  10.   

    out.print("<img src=\""+图片名+".bmp\>");
      

  11.   

    <%@ page contentType="text/html; charset=GB2312" %>直接放在最上边就可以解决中文乱码问题。