import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; 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 Check extends HttpServlet ... { private static int WIDTH=60; private static int HEIGHT=20; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException ...{ HttpSession session=request.getSession(); response.setContentType("image/jpeg"); ServletOutputStream sos=response.getOutputStream(); //设置浏览器不要缓存图片 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); //创建内存图像并获得图像上下文 BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB); Graphics g=image.getGraphics(); //产生随即得验证码 char[] rands=this.generateCheckCode(); //产生图像 this.drawBackground(g); this.drawRands(g, rands); //结束图像得绘制过程,完成图像 g.dispose(); //将图像输出到客户端 ByteArrayOutputStream bos=new ByteArrayOutputStream(); ImageIO.write(image, "JPEG",bos); byte[] buf=bos.toByteArray(); response.setContentLength(buf.length); bos.write(buf); bos.close(); //将验证码放入到session中 session.setAttribute("check_code", new String(rands)); } private char[] generateCheckCode()...{ //定义验证码得字符表 String chars="0123456789abcdefghijklmnopqrstuvwxyz"; char[] rands=new char[4]; for (int i = 0; i < 4; i++) ...{ int rand=(int)(Math.random()*36); rands[i]=chars.charAt(i); } return rands; } private void drawRands(Graphics g, char[] rands)...{ g.setColor(Color.BLACK); g.setFont(new Font(null,Font.ITALIC|Font.BOLD,18)); g.drawString(""+rands[0],1,17); g.drawString(""+rands[0],16,15); g.drawString(""+rands[0],31,18); g.drawString(""+rands[0],46,16); } private void drawBackground(Graphics g)...{ //画背景 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, WIDTH, HEIGHT); for (int i = 0; i < 120; i++) ...{ int x=(int)(Math.random()*WIDTH); int y=(int)(Math.random()*HEIGHT); int red=(int)(Math.random()*255); int green=(int)(Math.random()*255); int blue=(int)(Math.random()*255); g.setColor(new Color(red,green,blue)); g.drawOval(x, y, 1, 0); } } }