改成下面试试, 我试了没问题可能你程序取不到图片吧.
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import javax.swing.ImageIcon;
import java.awt.image.*;public class ValidateCode  extends HttpServlet {        private Font mFont=new Font("宋体", Font.PLAIN,14);//设置字体
        //处理post
        public void doPost(HttpServletRequest request,HttpServletResponse response)
                        throws ServletException,IOException {                doGet(request,response);
}
        public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
              try{      
               //取得一个1000-9999的随机数
                String s="";
                int intCount=0;
                intCount=(new Random()).nextInt(9999);//
                if(intCount<1000)intCount+=1000;
                s=intCount+"";                //保存入session,用于与用户的输入进行比较.
                //注意比较完之后清除session.
                HttpSession session=request.getSession (true);
                session.setAttribute("validateCode",s);
                response.setContentType("image/jpeg");
                response.setHeader("Pragma","no-cache");
                response.setHeader("Cache-Control","no-cache");
                response.setDateHeader("Expires",0);
                ServletOutputStream out=response.getOutputStream();
/**
                ImageIcon imgIcon=new ImageIcon("gw.jpg");
                if (imgIcon!=null) System.out.println("yes ,the image get it....");
                Image theImg =imgIcon.getImage();
                int width=theImg.getWidth(null);
                int height= theImg.getHeight(null);
               */
                int width=60, height=20;
                BufferedImage image = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);                Graphics gra=image.getGraphics();
                /**
                gra.drawImage(theImg,0, 0, null );
                //设置背景色
                gra.setColor(Color.yellow);
                gra.fillRect(1,1,33,12);
                //设置字体色
                gra.setColor(Color.black);
                gra.setFont(mFont);
                */
                
                
                // 设定背景色
gra.setColor(Color.yellow);
gra.fillRect(1,1,width,height);

//画边框
gra.setColor(Color.black);
gra.drawRect(0,0,width-1,height-1);
gra.setFont(mFont);

                
                //输出数字
                char c;
                System.out.println("1");
                for(int i=0;i<4;i++) {
                c=s.charAt(i);
                gra.drawString(c+"",i*7+4,15); //7为宽度,11为上下高度位置
                }
               
                JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
                if (encoder!=null) System.out.println("yes ,encoder get it .....");
                encoder.encode(image);
                
                out.close();
               }catch(Exception e){
                e.printStackTrace();
               }
         }
}

解决方案 »

  1.   

    如果我没有看错的话,ImageIcon imgIcon=new ImageIcon("images/strvalidate.gif");
    Image theImg =imgIcon.getImage();
    int width=theImg.getWidth(null);
    int height= theImg.getHeight(null);它们实际上width和height还都是0,并没有得到真正的高度和宽度,因为输出的图片的大小为0  ,当然在屏幕上时什么也都看不见了啊 .
      

  2.   

    比较重要的一点,我的这个servlet根本没能doPost,
    我在dopost方法开始加上了System.out.println();我的引用是:<img src="/validatecode" width=150 height=100>如果不将这个servlet 映射成/validatecode,那么我的调用是:<img src="/webexample/servlet/ezpay.sp.demo.ValidateCode" width=150 height=100>webexample是我的web context,我的调用有问题吗?谢谢兄弟们!
      

  3.   

    It's my problem...是我的路径设错了,十分感谢上面的兄弟。特别是gjdbf。
      

  4.   

    另外,这两句:HttpSession session=request.getSession (true);
    session.setAttribute("validateCode",s);会把session里的对象全部给清了,应该改为:HttpSession session=request.getSession ();
    session.removeAttribute("validateCode");
    session.setAttribute("validateCode",s);