javaweb:Response的应用(三)——验证码实现

验证码的有以下两种实现方式:

前端实现

后端实现

本次我们采用的是后端利用Java实现利用Response生成一个可以每几秒刷新一次的验证码的目的。

 

直接上源码

 1 package com.jms.servlet;
 2 
 3 import java.awt.Color;
 4 import java.awt.Font;
 5 import java.awt.Graphics;
 6 import java.awt.image.BufferedImage;
 7 import java.io.IOException;
 8 import java.util.Random;
 9 
10 import javax.imageio.ImageIO;
11 import javax.servlet.ServletException;
12 import javax.servlet.http.HttpServlet;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15 
16 
17 public class ImageServlet extends HttpServlet{
18 
19     @Override
20     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
21         //让浏览器每过几秒自动刷新,此处设置为3秒
22         resp.setHeader("Refresh", "3");
23         //在内存中创建一个图片
24         BufferedImage img = new BufferedImage(100, 40, BufferedImage.TYPE_INT_RGB);
25         //让图片的得到笔,对图片进行绘制
26         Graphics g = img.getGraphics();
27         g.setColor(Color.white);//设置画笔为白色
28         g.fillRect(0, 0, 100, 40);//将图片填充为白色
29         g.setColor(Color.BLACK);//设置画笔为黑色
30         g.setFont(new Font("黑体", Font.BOLD, 20));//设置字体
31         g.drawString(makeNum(), 20, 30);//将随机生成的验证码画在图片上
32         //告诉浏览器,这个请求以图片形式打开
33         resp.setContentType("image/jpeg");
34         //不让浏览器缓存
35         resp.setDateHeader("expires", -1);
36         resp.setHeader("Cache-Control", "no-Cache");
37         resp.setHeader("Pragma", "no-Cache");
38         //把图片写给浏览器
39         ImageIO.write(img, "jpg", resp.getOutputStream());
40     }
41 
42     @Override
43     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
44         doGet(req, resp);
45     }
46     
47     //生成随机的验证码
48     private String makeNum() {
49         Random random = new Random();
50         String arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
51         String makenum = "";
52         for(int i = 0; i < 5; i ++) {
53             int a = random.nextInt(26);//生成到随机数为0-25
54             makenum += arr.charAt(a);
55         }
56         return makenum;
57         
58     }
59 
60     
61 }

修改web.xml

    <servlet>
        <servlet-name>image</servlet-name>
        <servlet-class>com.jms.servlet.ImageServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>image</servlet-name>
        <url-pattern>/image</url-pattern>
    </servlet-mapping>

验证

 

 

 存在验证码,并且页面每三秒刷新一次,每次刷新都会生成新的验证码。

 

(本文仅作个人学习记录用,如有纰漏,敬请指正)

 

posted @ 2022-07-25 08:24  谁知道水烫不烫  阅读(194)  评论(0编辑  收藏  举报