第一次发帖子,新手求助 关于验证码的问题
这是我写的生成验证码的类:
package com.shopping.code;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import 
java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
/**
 * 生成验证图片类
 * 
 * @author acer
 * 
 */
public class image {
	//验证码中可以出现的字符集
	private char mapTable[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
			'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
			'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
			'9' };
	
	public String getCodeImage(int width,int height,OutputStream os){
		if(width<=0){
			width=60;
		}
		if(height<=0){
			height=20;
		}
		BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);	
		
		//获取图形上下文
		Graphics g=image.getGraphics();
		//设定背景颜色
		g.setColor(new Color(0xDCDCDC));
		g.fillRect(0, 0, width, height);
		
		//画边框
		g.setColor(Color.black);
		g.drawRect(0,0,width-1,height-1);
		
		//产生随机的验证码
		String strEnsure="";
		
		//4代表4位验证码,如需要产生更多的,请增大数值
		for(int i=0;i<4;i++){
			strEnsure+=mapTable[(int)(mapTable.length*Math.random())];
		}
		//将认证码显示到图像中,如果要生成更多位的验证码,增加DRAWSTRING 语句
		g.setColor(Color.black);
		g.setFont(new Font("AtlanticInline",Font.PLAIN,18));
		String str=strEnsure.substring(0,1);
		g.drawString(str,8,17);
		str=strEnsure.substring(1,2);
		g.drawString(str,20,15);
		str=strEnsure.substring(2,3);
		g.drawString(str,35,18);
		str=strEnsure.substring(3,4);
		g.drawString(str,45,15);
		
		//释放图形上下文
		g.dispose();
		
		try{
			ImageIO.write(image, "jpeg",os);
			 
		}catch(
IOException e){
			return " ";
		}
		
		return strEnsure;
		
	}
}
这是我在JSP里面读取验证码的 代码
<%String str=image.getCodeImage(0,0,response.getOutputStream());
out.clear();
out = pageContext.pushBody();
session.setAttribute("imageCode",str);
%>
然后运行页面之后就乱码,什么错也不报
求大神指教 
------解决方案--------------------编码问题,把你的servlet中request和response编码设置成和你的jsp中编码格式一样试试
------解决方案--------------------不是设置编码,应该是要设置 content type 为 image/jpeg。
另外顺便你这用jsp何必呢绕来绕去,用个servlet多好