Action类: package com.rail.web.action; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Random; import javax.imageio.ImageIO; import javax.imageio.stream.ImageOutputStream; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class RandomImgAction extends ActionSupport{ private static final long serialVersionUID = 5714077117036440055L; private Font mFont = new Font("Arial", Font.BOLD, 21); private ByteArrayInputStream inputStream; public ByteArrayInputStream getInputStream() { return inputStream; } public void setInputStream(ByteArrayInputStream inputStream) { this.inputStream = inputStream; } Color getRandColor(int fc, int bc) { Random random = new Random(); if (fc > 255) fc = 255; if (bc > 255) bc = 255; int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); } public String execute() throws Exception{ int width = 90, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); Random random = new Random(); //设定背景色 g.setColor(getRandColor(200, 250)); g.fillRect(1, 1, width - 1, height - 1); g.setColor(new Color(102, 102, 102)); g.drawRect(0, 0, width - 1, height - 1); g.setFont(mFont); //设定字体 g.setColor(getRandColor(160, 200)); for (int i = 0; i < 155; i++) { int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int x1 = random.nextInt(6) + 1; int y1 = random.nextInt(12) + 1; g.drawLine(x, y, x + x1, y + y1); } for (int i = 0; i < 70; i++) { int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int x1 = random.nextInt(12) + 1; int y1 = random.nextInt(6) + 1; g.drawLine(x, y, x - x1, y - y1); } String sRand = ""; for (int i = 0; i <5; i++) { String rand=String.valueOf(random.nextInt(10)); //生成数字 sRand+=rand; g.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110))); g.drawString(rand,13*i+6,16); //下面这段代码生成的是纯字母验证码 // int itmp = random.nextInt(26) + 65; // char ctmp = (char) itmp; // sRand += String.valueOf(ctmp); // g.setColor(new Color(20 + random.nextInt(110), 20 + random // .nextInt(110), 20 + random.nextInt(110))); // g.drawString(String.valueOf(ctmp), 15 * i + 10, 16); } HttpSession session=ServletActionContext.getRequest().getSession(true); session.setAttribute("rand", sRand); g.dispose(); ByteArrayOutputStream output = new ByteArrayOutputStream(); ImageOutputStream imageOut = ImageIO.createImageOutputStream(output); ImageIO.write(image, "JPEG", imageOut); imageOut.close(); ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); this.setInputStream(input); return SUCCESS; } } JSP页面引用: <img src="RandomImg.action" width="49" height="18" /> struts的动作配置省略。