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:获取G
29 Graphics g = img.getGraphics();
30 // 5:设置背景为white
31 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 // 使用ImageIO
69 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 }