java生成验证码的代码,该怎么解决

java生成验证码的代码
谁能给我生成验证码的代码啊?求
------解决方案--------------------


package com.softeem.servlet;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImageServlet extends HttpServlet {

@Override
public void destroy() {
super.destroy();
}

@Override
public void init() throws ServletException {
super.init();
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 禁止图像缓存,使得单击验证码可以刷新验证码图片
resp.setHeader("Pragma", "nocache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");

BufferedImage bim = new BufferedImage(70, 20,
BufferedImage.TYPE_INT_RGB);
Graphics2D gc = bim.createGraphics();
// 设置图片填充颜色
gc.setColor(Color.yellow);
gc.fillRect(0, 0, 70, 20);
// 设置边框颜色
gc.setColor(Color.pink);
gc.drawRect(0, 0, 69, 19);
// 产生4位随机数
Random rand = new Random();
StringBuffer sb = new StringBuffer();
// 设置干扰线颜色
gc.setColor(Color.cyan);
for (int j = 0; j < 30; j++) {
int x = rand.nextInt(70);
int y = rand.nextInt(20);
int x1 = rand.nextInt(6);
int y1 = rand.nextInt(6);
// 往图片里面画干扰线
gc.drawLine(x, y, x + x1, y + y1);
}

for (int i = 0; i < 4; i++) {
int m = rand.nextInt(9);
// 将生成的数字写入到图片中去,int转成string
String str = String.valueOf(m);
// 设置字体颜色
gc.setColor(Color.RED);
gc.drawString(str, i * 10 + 20, 15);
sb.append(m);
}
// 将stringbuffer转成string
String sb1 = String.valueOf(sb);
// 将生成的验证码的值放到session中去
req.getSession().setAttribute("code", sb1);
// 将图片以流的形式输出
ServletOutputStream sos = resp.getOutputStream();
ImageIO.write(bim, "jpg", sos);
sos.close();
}
}


以前用过的。。。可以自己改
------解决方案--------------------
后台JAVA代码:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;




public class ImageAction extends HttpServlet { 

/** 
* 执行登陆的业务处理 
* @param request:发送上来的请求 
* @return destJsp:目标URL 
*/ 
public void init() throws ServletException
    {
        super.init();
    }



public void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{
//设置页面不缓存 
response.setHeader("Pragma", "No-cache"); 
response.setHeader("Cache-Control", "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(220, 250)); 
g.fillRect(0, 0, width, height); 
//设定字体 
g.setFont(new Font("Times New Roman", Font.PLAIN, 18)); 
//画边框 
//g.drawRect(0,0,width-1,height-1); 
g.draw3DRect(0,0,width-1,height-1,true); 
//随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 
g.setColor(getRandColor(160, 200)); 
for (int i = 0; i < 155; i++) { 
int x = random.nextInt(width); 
int y = random.nextInt(height);