zoukankan      html  css  js  c++  java
  • servlet编写验证码

    由于需要就写了一个生成验证码的servlet 简洁实用

     1 import java.awt.Color;
     2 import java.awt.Font;
     3 import java.awt.Graphics;
     4 import java.awt.image.BufferedImage;
     5 import java.io.IOException;
     6 import java.util.Date;
     7 import java.util.Random;
     8 import javax.imageio.ImageIO;
     9 import javax.servlet.ServletException;
    10 import javax.servlet.annotation.WebServlet;
    11 import javax.servlet.http.HttpServlet;
    12 import javax.servlet.http.HttpServletRequest;
    13 import javax.servlet.http.HttpServletResponse;
    14 
    15 /**
    16  * Servlet implementation class ValidateCode
    17  */
    18 @WebServlet("/ValidateCode")
    19 public class ValidateCode extends HttpServlet {
    20     private static final long serialVersionUID = 1L;
    21        
    22     /**
    23      * @see HttpServlet#HttpServlet()
    24      */
    25     public ValidateCode() {
    26         super();
    27         // TODO Auto-generated constructor stub
    28     }
    29 
    30     /**
    31      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    32      */
    33     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    34         
    35         // 设置页面不缓存
    36           response.setHeader("Pragma", "No-cache");
    37           response.setHeader("Cache-Control", "no-cache");
    38           response.setDateHeader("Expires", 0);
    39           // 设置图片的长宽
    40           int width = 62, height = 22;
    41           // ////// 创建内存图像
    42           BufferedImage image = new BufferedImage(width, height,
    43             BufferedImage.TYPE_INT_RGB);
    44           // 获取图形上下文
    45           Graphics g = image.createGraphics();
    46           // 设定图像背景色(因为是做背景,所以偏淡)
    47           g.setColor(getRandColor(180, 250));
    48           g.fillRect(0, 0, width, height);
    49           // 设置字体
    50           g.setFont(new Font("Times New Roman", Font.PLAIN, 17));
    51           // /////设置默认生成4个验证码
    52           int length = 4;
    53           java.util.Random rand = new Random(); // 设置随机种子
    54           /*
    55            * if (request.getParameter("length") != null) { try { length =
    56            * Integer.parseInt(request.getParameter("length")); }catch
    57            * (NumberFormatException e) {} }
    58            */
    59           // 设置备选验证码:包括"a-z"和数字"0-9"
    60           String base = "abcdefghijklmnopqrstuvwxyz0123456789";
    61           int size = base.length();
    62           StringBuffer str = new StringBuffer();
    63           for (int i = 0; i < length; i++) {
    64            int start = rand.nextInt(size);
    65            String tmpStr = base.substring(start, start + 1);
    66            str.append(tmpStr);
    67            // 生成随机颜色(因为是做前景,所以偏深)
    68            g.setColor(getRandColor(10, 150));
    69            // 将此字画到图片上
    70            // g.drawString(str.toString(), 4, 17);
    71            g.drawString(tmpStr, 13 * i + 6 + rand.nextInt(5), 14 + rand
    72              .nextInt(6));
    73           }
    74           // 将认证码存入session
    75           request.getSession().setAttribute("valiCode", str.toString());
    76           // 图象生效
    77           g.dispose();
    78           // 输出图象到页面
    79           ImageIO.write(image, "JPEG", response.getOutputStream());
    80          }
    81          public void doPost(HttpServletRequest request, HttpServletResponse response)
    82            throws ServletException, IOException {
    83           this.doGet(request, response);
    84          }
    85          // 给定范围获得一个随机颜色
    86          Color getRandColor(int fc, int bc) {
    87           Random random = new Random();
    88           if (fc > 255)
    89            fc = 255;
    90           if (bc > 255)
    91            bc = 255;
    92           int r = fc + random.nextInt(bc - fc);
    93           int g = fc + random.nextInt(bc - fc);
    94           int b = fc + random.nextInt(bc - fc);
    95           return new Color(r, g, b);
    96          }
    97         }
    View Code
  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/senfanxie/p/7859645.html
Copyright © 2011-2022 走看看