• Day23--前后端分离项目中如何使用 Vue.js 和 Axios 加载 WebServlet 生成的验证码图片


    前后端分离的项目中,使用 Vue.js 作为前端框架,通过 Axios 向后端发送请求以获取验证码图片是一个常见的场景。本文将介绍如何在 Vue 项目中通过 Axios 从后端 WebServlet 获取验证码图片流,并将其加载到前端页面中。

    1. 需求分析

    在许多应用中,验证码用于防止自动化脚本进行恶意操作。验证码图片通常由后端生成,然后前端需要通过 API 获取并展示。我们假设后端使用 Java WebServlet 来生成验证码图片,并将其作为二进制数据流返回给前端。前端使用 Vue.js 进行页面展示,并通过 Axios 发送 HTTP 请求。

    2. 后端 WebServlet 生成验证码图片

    首先,在后端,我们需要一个 WebServlet 来生成并返回验证码图片。下面是一个简单的示例:

    package service;
    import cn.dsna.util.images.*;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    @WebServlet("/code")
    public class code extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req, resp);
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //创建了一个 ValidateCode 实例,传入四个参数:
            //第一个参数是验证码图像的宽度(500 像素)。
            //第二个参数是验证码图像的高度(200 像素)。
            //第三个参数是验证码字符的数量(4 个字符)。
            //第四个参数是干扰线的数量(100 条线)。
            ValidateCode validateCode = new ValidateCode(500,200,4,100);
            //拿到生成的验证码值
            String code = validateCode.getCode();
    //将生成的验证码字符串存储到 session 中,键为 "code"
    // 这样可以在后续的请求中验证用户输入的验证码是否正确
            HttpSession sessions = req.getSession();
            sessions.setAttribute("code",code);
            //将生成的验证码图像写入到响应的输出流中。
            // 验证码图像会被发送给客户端显示。
            validateCode.write(resp.getOutputStream());
        }
    }
    
    

    此 WebServlet 处理 /captcha 路径的 GET 请求,生成验证码图片并将其作为 PNG 格式的响应返回。

    3. 前端 Vue.js 中使用 Axios 请求验证码

    在前端,我们使用 Axios 来发送请求并获取验证码图片数据。假设我们在一个 Vue 组件中加载验证码:

    
    
    
    
    4. 关键技术点解析
    • responseType: 'blob': 在 Axios 请求中设置 responseType'blob',确保 Axios 将二进制数据作为 Blob 对象处理,这对于处理图片数据尤为重要。

    • URL.createObjectURL: 使用 URL.createObjectURL 方法将从后端获取的 Blob 数据转换为一个可供 标签使用的 URL。

    • 图片刷新: 当用户点击图片时,调用 loadCaptcha 方法重新请求验证码图片,从而实现验证码的刷新。

  • 相关阅读:
    作用域理解
    docker镜像命令
    MySql的基础讲解
    linux 单机安装 kafka
    基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)
    React使用create-react-app创建react项目
    Android-SQLite数据库实战
    设计模式——7. 装饰者模式
    浅谈对接海康SDK语音对讲功能
    小剧场短剧影视小程序源码,附带系统搭建教程
  • 原文地址:https://blog.csdn.net/github_49984491/article/details/141097431