1.验证码图片生成javabean

package image.verifier;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
/**
* www.txdnet.cn
* @author TonyDon
*/
public class ImageVerifier {
private ImageVerifier()
{
}

public static final String getImageString(int i, String imageStyle ,OutputStream outputstream)
{
String s = "";
try
{
BufferedImage bufferedimage = new BufferedImage(66, 20, 4);
Graphics2D G2D = bufferedimage.createGraphics();
int j = BACK_COLOR[randomInt(0, BACK_COLOR.length)];
G2D.setColor(new Color(j));
G2D.setBackground(new Color(j));
G2D.fillRect(0, 0, 66, 20);
G2D.setColor(new Color(0x92c3e5));
G2D.drawRect(0, 0, 65, 19);
for(int k = 0; k < i; k++){
s = (new StringBuilder()).append(s).append(mapTable[(int)((double)mapTable.length * Math.random())]).toString();
}

for(int l = 0; l < s.length(); l++)
{
String s1 = s.substring(l, l + 1);
Color color = new Color(CHAR_COLOR[randomInt(0, CHAR_COLOR.length)]);
G2D.setColor(color);
G2D.setFont(new Font(FontStyle, 0, 16));
int l1 = l * 15 + 4;
int i2 = randomInt(13, 17);
G2D.drawString(s1, l1, i2);
}

for(int i1 = 1; i1 <= 10; i1++)
{
int j1 = randomInt(2, 65);
int k1 = randomInt(2, 19);
Color color1 = new Color(CHAR_COLOR[randomInt(0, CHAR_COLOR.length)]);
G2D.setColor(color1);
G2D.drawOval(j1, k1, 1, 1);
}

G2D.dispose();
bufferedimage.flush();
ImageIO.write(bufferedimage, imageStyle, outputstream);
outputstream.flush();
outputstream.close();
}
catch(Exception exception)
{
return exception.toString();
}
return s;
}

private static int randomInt(int i, int j)
{
Random random = new Random();
return i + random.nextInt(j - i);
}

private static final int Y_pos = 10;
private static final int X_pos = 15;
private static final int width = 66;
private static final int height = 20;
private static final int FONT_SIZE = 16;
private static final int BACK_COLOR[] = {
0xb3d5ed, 0xc1ead5
};
private static final int CHAR_COLOR[] = {
25327, 0x976824, 0x308b5d
};
private static final int LINE_COLOR[] = {
21968, 0xb46900
};
private static final String FontStyle = "Geneva, Verdana, Arial, Helvetica";
private static final char mapTable[] = {
'1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 
'b', 'd', 'h', 'n', 'x', 's', 't', 'e'
};

}


2.Servlet调用图片代码生成类

package image.verifier;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* www.txdnet.cn
* @author TonyDon
*/
public class VerifyImageServlet extends HttpServlet {

public VerifyImageServlet(){
}

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

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

/** 
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.reset();
response.setContentType( "image/png" );
response.setHeader( "Pragma", "No-cache" );
response.setHeader( "Cache-Control", "no-cache" );
response.setDateHeader( "Expires", 0 );
HttpSession sn =null;


sn = request.getSession(true);
//sn.setMaxInactiveInterval(60);
sn.setAttribute( "snCode", ImageVerifier.getImageString(4,"png",response.getOutputStream()) );
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet 方法.单击左侧的 + 号以编辑代码.">
/** 
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/** 
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/** 
* Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}// </editor-fold>

}


3.WEB.XML配置

<servlet>
<servlet-name>VerifyImageServlet</servlet-name>
<servlet-class>image.verifier.VerifyImageServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>VerifyImageServlet</servlet-name>
<url-pattern>/VerifyImageServlet/verify.png</url-pattern>
</servlet-mapping>

4.运行 http://localhost:8080/VerifyImageServlet/verify.png

---

[url=http://www.txdnet.cn/essay/view.jsp?tid=1252069378343&cid=2]http://www.txdnet.cn/essay/view.jsp?tid=1252069378343&cid=2[/url]