zoukankan      html  css  js  c++  java
  • java 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.Date;
    import java.util.Random;
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class ValidateCode
     */
    @WebServlet("/ValidateCode")
    public class ValidateCode extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public ValidateCode() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            // 设置页面不缓存
              response.setHeader("Pragma", "No-cache");
              response.setHeader("Cache-Control", "no-cache");
              response.setDateHeader("Expires", 0);
              // 设置图片的长宽
              int width = 62, height = 22;
              // ////// 创建内存图像
              BufferedImage image = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
              // 获取图形上下文
              Graphics g = image.createGraphics();
              // 设定图像背景色(因为是做背景,所以偏淡)
              g.setColor(getRandColor(180, 250));
              g.fillRect(0, 0, width, height);
              // 设置字体
              g.setFont(new Font("Times New Roman", Font.PLAIN, 17));
              // /////设置默认生成4个验证码
              int length = 4;
              java.util.Random rand = new Random(); // 设置随机种子
              /*
               * if (request.getParameter("length") != null) { try { length =
               * Integer.parseInt(request.getParameter("length")); }catch
               * (NumberFormatException e) {} }
               */
              // 设置备选验证码:包括"a-z"和数字"0-9"
              String base = "abcdefghijklmnopqrstuvwxyz0123456789";
              int size = base.length();
              StringBuffer str = new StringBuffer();
              for (int i = 0; i < length; i++) {
               int start = rand.nextInt(size);
               String tmpStr = base.substring(start, start + 1);
               str.append(tmpStr);
               // 生成随机颜色(因为是做前景,所以偏深)
               g.setColor(getRandColor(10, 150));
               // 将此字画到图片上
               // g.drawString(str.toString(), 4, 17);
               g.drawString(tmpStr, 13 * i + 6 + rand.nextInt(5), 14 + rand
                 .nextInt(6));
              }
              // 将认证码存入session
              request.getSession().setAttribute("valiCode", str.toString());
              // 图象生效
              g.dispose();
              // 输出图象到页面
              ImageIO.write(image, "JPEG", response.getOutputStream());
             }
             public void doPost(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
              this.doGet(request, response);
             }
             // 给定范围获得一个随机颜色
             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);
             }
            }
  • 相关阅读:
    Java实现 LeetCode 69 x的平方根
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 66 加一
    Java实现 LeetCode 66 加一
    CxSkinButton按钮皮肤类
  • 原文地址:https://www.cnblogs.com/Jansens520/p/7860075.html
Copyright © 2011-2022 走看看