| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 
 | import javax.imageio.ImageIO;import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.Random;
 
 public class JcaptchaServlet extends HttpServlet {
 private Random random = new Random();
 public void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 
 int height = 220;
 int width = 220;
 BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
 Graphics2D g =  (Graphics2D) image.getGraphics();
 String picPath= JcaptchaServlet.class.getClassLoader().getResource("../image/"+(random.nextInt(4)+1)+".jpg").getPath();
 g.drawImage(ImageIO.read(new File(picPath)), 0, 20, width, height, null);
 g.setColor(Color.white);
 g.drawRect(0, 0, width-1, height-1);
 
 g.setFont(new Font("宋体",Font.BOLD,20));
 Integer x=null,y=null;
 String target=null;
 for(int i=0;i<4;i++){
 g.setColor(new Color(random.nextInt(50)+200, random.nextInt(150)+100, random.nextInt(50)+200));
 String str=getRandomChineseChar();
 int a=random.nextInt(width-100) + 50;
 int b=random.nextInt(height-70) + 55;
 if(x==null){
 x=a;
 }
 if(y==null){
 y=b;
 }
 if(target==null){
 target=str;
 }
 g.drawString(str, a, b);
 }
 g.setColor(Color.white);
 g.drawString("点击"+target, 0,20);
 request.getSession().setAttribute("gap",x+":"+y);
 
 g.dispose();
 
 ImageIO.write(image, "jpg", response.getOutputStream());
 
 }
 
 private String getRandomChineseChar()
 {
 String str = null;
 int hs, ls;
 Random random = new Random();
 hs = (176 + Math.abs(random.nextInt(39)));
 ls = (161 + Math.abs(random.nextInt(93)));
 byte[] b = new byte[2];
 b[0] = (new Integer(hs).byteValue());
 b[1] = (new Integer(ls).byteValue());
 try
 {
 str = new String(b, "GBk");
 }
 catch (UnsupportedEncodingException ex)
 {
 ex.printStackTrace();
 }
 return str;
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 doGet(request, response);
 }
 
 }
 
 |