改成下面试试, 我试了没问题可能你程序取不到图片吧.
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();
}
}
}
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();
}
}
}
Image theImg =imgIcon.getImage();
int width=theImg.getWidth(null);
int height= theImg.getHeight(null);它们实际上width和height还都是0,并没有得到真正的高度和宽度,因为输出的图片的大小为0 ,当然在屏幕上时什么也都看不见了啊 .
我在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,我的调用有问题吗?谢谢兄弟们!
session.setAttribute("validateCode",s);会把session里的对象全部给清了,应该改为:HttpSession session=request.getSession ();
session.removeAttribute("validateCode");
session.setAttribute("validateCode",s);