| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

jsp 生成网页验证码的Servlet

import java.awt.Color;  import java.awt.Font;  import java.awt.Graphics;  import java.awt.image.BufferedImage;  import java.io.IOException;  import java.util.Random;    import javax.imageio.ImageIO;  import javax.servlet.ServletException;  import javax.servlet.http.HttpServlet;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;    /**   * 生成图形验证码的Servlet   */  public class ImageCodeMakerServlet extends HttpServlet {     public void doGet(HttpServletRequest req, HttpServletResponse resp)     throws ServletException, IOException {    doPost(req, resp);   }     /**    * @see javax.servlet.http.HttpServlet#void    *      (javax.servlet.http.HttpServletRequest,    *      javax.servlet.http.HttpServletResponse)    */   public void doPost(HttpServletRequest req, HttpServletResponse resp)     throws ServletException, IOException {      // 首先设置页面不缓存    resp.setHeader("Pragma", "No-cache");    resp.setHeader("Cache-Control", "no-cache");    resp.setDateHeader("Expires", 0);      // 定义图片的宽度和高度    int width = 90, height = 40;    // 创建一个图像对象    BufferedImage image = new BufferedImage(width, height,      BufferedImage.TYPE_INT_RGB);    // 得到图像的环境对象    Graphics g = image.createGraphics();      Random random = new Random();    // 用随机颜色填充图像背景    g.setColor(getRandColor(180, 250));    g.fillRect(0, 0, width, height);    for (int i = 0; i < 5; i++) {     g.setColor(getRandColor(50, 100));     int x = random.nextInt(width);     int y = random.nextInt(height);     g.drawOval(x, y, 4, 4);    }    // 设置字体,下面准备画随机数    g.setFont(new Font("", Font.PLAIN, 40));    // 随机数字符串    String sRand = "";    for (int i = 0; i < 4; i++) {     // 生成四个数字字符     String rand = String.valueOf(random.nextInt(10));     sRand += rand;     // 生成随机颜色     g.setColor(new Color(20 + random.nextInt(80), 20 + random       .nextInt(100), 20 + random.nextInt(90)));     // 将随机数字画在图像上     g.drawString(rand, (17 + random.nextInt(3)) * i + 8, 34);       // 生成干扰线     for (int k = 0; k < 12; k++) {      int x = random.nextInt(width);      int y = random.nextInt(height);      int xl = random.nextInt(9);      int yl = random.nextInt(9);      g.drawLine(x, y, x + xl, y + yl);     }    }      // 将生成的随机数字字符串写入Session    req.getSession().setAttribute("randcode", sRand);    // 使图像生效    g.dispose();    // 输出图像到页面    ImageIO.write(image, "JPEG", resp.getOutputStream());   }     /**    * 产生一个随机的颜色    *     * @param fc    *            颜色分量最小值    * @param bc    *            颜色分量最大值    * @return    */   public Color getRandColor(int fc, int bc) {    Random random = new Random();    if (fc > 255) {     fc = 255;    }    if (bc > 255) {     bc = 255;    }    int r = fc + random.nextInt(bc - fc);    int g = fc + random.nextInt(bc - fc);    int b = fc + random.nextInt(bc - fc);    return new Color(r, g, b);   }  }