1 package cn.meeting.utils; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.image.BufferedImage; 7 import java.io.IOException; 8 import java.io.OutputStream; 9 import java.util.Random;10 11 import javax.imageio.ImageIO;12 import javax.servlet.ServletException;13 import javax.servlet.http.HttpServlet;14 import javax.servlet.http.HttpServletRequest;15 import javax.servlet.http.HttpServletResponse;16 import javax.servlet.http.HttpSession;17 18 public class ImgServlet extends HttpServlet {19 private static final long serialVersionUID = 1L;20 21 protected void doGet(HttpServletRequest request, HttpServletResponse response)22 throws ServletException, IOException {23 // 1:声明高宽24 int width = 60;25 int height = 30;26 // 2:定义内存中的图片27 BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);28 // 4:获取G29 Graphics g = img.getGraphics();30 // 5:设置背景为white31 g.setColor(Color.WHITE);32 g.fillRect(0, 0, width, height);33 g.setFont(new Font("宋体", Font.BOLD, 18));34 //35 Random r = new Random();36 StringBuilder stringBuilder = new StringBuilder();37 String str="";38 for (int i = 0; i < 4; i++) {39 //int a = r.nextInt(10); 生成数字验证码40 41 //生成字母验证码42 /*int t = r.nextInt(2);43 char a = t ==0? (char)(r.nextInt(26)+'a'):(char)(r.nextInt(26)+'A');44 stringBuilder.append(a);*/45 46 str = getRandomChar();47 stringBuilder.append(str);48 g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));49 g.drawString("" + str, i * 15, 10 + r.nextInt(20));50 }51 52 //------将验证码保存到session中去53 54 HttpSession session = request.getSession();55 session.setAttribute("randomNum", str);56 57 for (int i = 0; i < 8; i++) {58 g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));59 g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));60 }61 62 //63 g.dispose();64 65 // 设置输出的类型66 response.setContentType("image/jpg");67 OutputStream out = response.getOutputStream();68 // 使用ImageIO69 ImageIO.write(img, "JPEG", out);70 }71 72 /*73 * 生成验证码的方法74 */75 public static String getRandomChar() { 76 int index = (int) Math.round(Math.random() * 2); 77 String randChar = ""; 78 switch (index) { 79 case 0://大写字符 80 randChar = String.valueOf((char)Math.round(Math.random() * 25 + 65)); 81 break; 82 case 1://小写字符 83 randChar = String.valueOf((char)Math.round(Math.random() * 25 + 97)); 84 break; 85 default://数字 86 randChar = String.valueOf(Math.round(Math.random() * 9)); 87 break; 88 } 89 return randChar; 90 } 91 }