1 2 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); }
}
|