RandomCodeServlet.java
上传用户:zhc3n3
上传日期:2022-07-30
资源大小:2750k
文件大小:3k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

JavaScript

  1. package com.t11.web;
  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.image.BufferedImage;
  7. import java.io.IOException;
  8. import java.util.Random;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.ServletOutputStream;
  11. import javax.servlet.http.HttpServlet;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14. import com.sun.image.codec.jpeg.JPEGCodec;
  15. import com.sun.image.codec.jpeg.JPEGImageEncoder;
  16. /**
  17.  * 验证码
  18.  * @author student
  19.  *
  20.  */
  21. public class RandomCodeServlet extends HttpServlet{
  22. static StringBuffer randomCode;
  23. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  24. throws ServletException, IOException {
  25. doPost(request,response);
  26. }
  27. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  28. throws ServletException, IOException {
  29. //设置页面不缓存
  30. response.setHeader("Pragma", "No-cache");
  31. response.setHeader("Cache-Control", "no-cache");
  32. response.setDateHeader("Expires", 0);
  33. // 在内存中创建图象
  34. int width = 60, height = 20;
  35. BufferedImage image = new BufferedImage(width, height,
  36. BufferedImage.TYPE_INT_RGB);
  37. // 获取图形上下文
  38. Graphics g = image.getGraphics();
  39. //随机验证码
  40. String[] codes = { "0", "1", "2", "3", "4", "5", "6", "7", "8",
  41. "9", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "a",
  42. "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v",
  43. "b", "n", "m", "Q", "W", "E", "R", "T", "Y", "U", "I", "O",
  44. "P", "A", "S", "D", "F", "G", "H", "J", "K", "L", "Z", "X",
  45. "C", "V", "B", "N", "M" };
  46. //生成随机类
  47. Random random = new Random();
  48. // 设定背景色
  49. g.setColor(getRandColor(200, 250));
  50. g.fillRect(0, 0, width, height);
  51. //设定字体
  52. g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
  53. //画边框
  54. //g.setColor(new Color());
  55. //g.drawRect(0,0,width-1,height-1);
  56. // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
  57. g.setColor(getRandColor(160, 200));
  58. for (int i = 0; i < 155; i++) {
  59. int x = random.nextInt(width);
  60. int y = random.nextInt(height);
  61. int xl = random.nextInt(12);
  62. int yl = random.nextInt(12);
  63. g.drawLine(x, y, x + xl, y + yl);
  64. }
  65. // 取随机产生的认证码(4位字符)
  66. String sRand = "";
  67. for (int i = 0; i < 4; i++) {
  68. int ix = random.nextInt(62);
  69. sRand += codes[ix];
  70. // String rand=String.valueOf(random.nextInt(10));
  71. //sRand+=rand;
  72. // 将认证码显示到图象中
  73. g.setColor(new Color(20 + random.nextInt(110), 20 + random
  74. .nextInt(110), 20 + random.nextInt(110)));
  75. g.drawString(codes[ix], 13 * i + 6, 16);
  76. }
  77. // 将认证码存入SESSION
  78. //将验证码保存到session中
  79. request.getSession().setAttribute("code", sRand);
  80. // 图象生效
  81. g.dispose();
  82. //响应流
  83. ServletOutputStream sos = response.getOutputStream();
  84. //图片编码器
  85. JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);
  86. //响应输出
  87. encoder.encode(image);
  88. sos.close();
  89. // 输出图象到页面
  90. // ImageIO.write(image, "JPEG", response.getOutputStream());
  91. }
  92. public Color getRandColor(int fc, int bc) {//给定范围获得随机颜色
  93. Random random = new Random();
  94. if (fc > 255)
  95. fc = 255;
  96. if (bc > 255)
  97. bc = 255;
  98. int r = fc + random.nextInt(bc - fc);
  99. int g = fc + random.nextInt(bc - fc);
  100. int b = fc + random.nextInt(bc - fc);
  101. return new Color(r, g, b);
  102. }
  103. }