其他分享
首页 > 其他分享> > HttpServletResponse简单应用之生成随机数验证码图片

HttpServletResponse简单应用之生成随机数验证码图片

作者:互联网

声明

本文部分内容参考自其他作者原创文章,仅供个人学习留档,特此声明

参考文章链接

(1条消息) B站---【狂神说Java】JavaWeb入门到实战---笔记_夜里的雨的博客-CSDN博客_狂神说java笔记

生成随机数验证码图片

一定要看代码注释加深理解!

思考一个问题,网页中的验证码功能是如何实现的?

1.之前已经学过了前端相关技术,可以使用前端的知识来生成验证码

2.后端实现:需要用到Java的图片类来生产一张验证码图片

接下来我们用java图片类来生成一张随机的验证码图片

1、代码

1.用于生成随机验证码图片的ImageServlet代码

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

public class ImageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //让浏览器每隔一段时间刷新一次以实现验证码的自动刷新功能
        resp.setHeader("refresh","3");//让浏览器每3s刷新一次

        //创建一张图片
        BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
        //得到2D图片返回给g
        Graphics2D g = (Graphics2D) image.getGraphics();
        //设置图片的背景颜色
        g.setColor(Color.white);
        g.fillRect(0,0,80,20);//填充起始点为(0,0)也就是2D图片的左上角
        //给图片写数据
        g.setColor(Color.BLUE);//验证码字体为蓝色
        g.setFont(new Font(null,Font.BOLD,20));//设置字体粗细和大小
        g.drawString(makeNum(),0,20);//在2D图片的(0,20)坐标位置画出生成的随机数

        //告诉浏览器,这个请求用图片的方式打开
        resp.setContentType("image/jpeg");

        //网站存在缓存功能,我们不让浏览器缓存该2D图片
        resp.setDateHeader("expires",-1);//Expires:响应过期的日期和时间
        resp.setHeader("Cache-Control","no-cache");//Cache-Control:告诉所有的缓存机制是否可以缓存及缓存类型
        resp.setHeader("Pragma","no-cache");//Pragma:包括实现特定的指令,它可应用到响应链上的任何接收方

        //把图片写给浏览器
        ImageIO.write(image,"jpg", resp.getOutputStream());
    }
    //生成随机数
    private String makeNum(){
        Random random = new Random();
        String num = random.nextInt(9999999) + "";//带参的nextInt(int x)会生成一个范围在0~x(不包含x)内的任意正整数
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 7-num.length() ; i++) {
            sb.append("0");
        }
        num = sb.toString() + num;
        return num;
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2.用于注册映射路径的web.xml代码

<servlet>
	<servlet-name>ImageServlet</servlet-name>
	<servlet-class>com.xy.servlet.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>ImageServlet</servlet-name>
	<url-pattern>/img</url-pattern>
</servlet-mapping>

2、代码测试

如下图所示,生成的随机数验证码图片每过3s刷新一次,每次都是随机的


标签:java,resp,HttpServletResponse,验证码,随机数,import,生成,图片
来源: https://www.cnblogs.com/xypersonal/p/16310306.html