生成验证码原理

课程代码:

 1 package com.kuang.servlet;
 2 
 3 import javax.imageio.ImageIO;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import java.awt.*;
 9 import java.awt.image.BufferedImage;
10 import java.io.IOException;
11 import java.util.Random;
12 
13 public class ImageServlet extends HttpServlet {
14 
15     @Override
16     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
17         // 让浏览器3秒自动刷新一次
18         resp.setHeader("refresh","3");
19 
20         // 在内存中创建一个图片
21         BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
22 
23         // 得到图片
24         Graphics2D g = (Graphics2D) image.getGraphics(); //可以理解为画笔
25 
26         //设置图片的背景颜色
27         g.setColor(Color.WHITE);
28         g.fillRect(0,0,80,20);
29 
30         //给图片写随机数
31         //设置字体颜色
32         g.setColor(Color.BLUE);
33         //设置字体样式
34         g.setFont(new Font(null, Font.BOLD, 20));
35         // 画图
36         g.drawString(makeNum(), 0, 20);
37 
38         //告诉浏览器,请求用图片形式打开
39         resp.setContentType("image/jpeg");
40         // 网站存在缓存,不让浏览器缓存
41         resp.setDateHeader("expires", -1);
42         resp.setHeader("Cache-Control", "no-cache");
43         resp.setHeader("Pragma", "no-cache");
44 
45         // 把图片写给浏览器
46         ImageIO.write(image, "jpg", resp.getOutputStream());
47 
48     }
49 
50     // 生成随机数
51     private String makeNum(){
52         Random random = new Random();
53         String num = random.nextInt(99999999) + "";
54         StringBuffer sb = new StringBuffer();
55         for (int i = 0; 0 < 7-num.length(); i++) {
56             sb.append("0");
57         }
58         num = sb.toString() + num;
59         return num;
60     }
61 
62     @Override
63     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
64         super.doPost(req, resp);
65     }
66 }
View Code

 

posted @ 2021-03-14 21:01  现在开始JAVA  阅读(37)  评论(0)    收藏  举报