当前位置: 首页 > news >正文

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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected 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 组件中加载验证码:

<template><div><img :src="captchaUrl" @click="loadCaptcha" alt="验证码" /><p>点击图片刷新验证码</p></div>
</template><script>import axios from 'axios';new Vue({data() {return {captchaUrl: '', // 用于存储验证码图片的URL
};
},methods: {loadCaptcha() {// 请求后端的验证码图片axios.get('/captcha', { responseType: 'blob' }) // 确保响应类型为 blob.then(response => {const url = URL.createObjectURL(response.data); // 将 blob 转换为 URLthis.captchaUrl = url;
}).catch(error => {console.error("获取验证码失败:", error);
});
}
},mounted() {this.loadCaptcha(); // 初始化时加载验证码
}
});
</script>
4. 关键技术点解析
  • responseType: 'blob': 在 Axios 请求中设置 responseType'blob',确保 Axios 将二进制数据作为 Blob 对象处理,这对于处理图片数据尤为重要。

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 三高服务是指什么
  • Docker中新建Python容器运行yolov9
  • Intellij Idea使用技巧
  • C# 闭包详解
  • Traceeshark:Wireshark 的开源插件
  • 结队编程(95%用例)D卷(JavaPythonC++Node.jsC语言)
  • lua匹配MAC地址 正则表达式
  • HarmonyOS第五章:组件抽取、构建函数抽取@Builder、构建函数插槽@BuilderParam
  • springboot+Loki+Loki4j+Grafana搭建轻量级日志系统
  • web自动化6-pytest⑦一些基本情况
  • 基于深度学习的物理仿真
  • CUDA--内存访问越界或无效的索引操作解决办法
  • 如何给 VMware Workstation 虚拟机配置代理
  • docker load 后镜像名称为空的问题解决
  • php json_decode 带反斜杠字符串json解析
  • [译] React v16.8: 含有Hooks的版本
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Kibana配置logstash,报表一体化
  • MYSQL 的 IF 函数
  • OSS Web直传 (文件图片)
  • Python_OOP
  • Selenium实战教程系列(二)---元素定位
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 编写符合Python风格的对象
  • 基于webpack 的 vue 多页架构
  • 简单易用的leetcode开发测试工具(npm)
  • 删除表内多余的重复数据
  • 微信小程序--------语音识别(前端自己也能玩)
  • 正则学习笔记
  • 阿里云服务器如何修改远程端口?
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # 安徽锐锋科技IDMS系统简介
  • ###C语言程序设计-----C语言学习(3)#
  • #在 README.md 中生成项目目录结构
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)虚拟机的安装与使用,linux系统安装
  • (31)对象的克隆
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (九十四)函数和二维数组
  • (七)Flink Watermark
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (新)网络工程师考点串讲与真题详解
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)jdk与jre的区别
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .Net mvc总结
  • .net 验证控件和javaScript的冲突问题
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .netcore 获取appsettings